Utilisation des constantes directement dans la signature racine
Les applications peuvent définir des constantes racine dans la signature racine, chacune sous la forme d’un ensemble de valeurs 32 bits. Elles s’affichent en langage HLSL (High Level Shading Language) en tant que mémoire tampon constante. Notez que les mémoires tampons constantes pour des raisons historiques sont affichées sous forme d’ensembles de valeurs 4x32 bits.
Chaque ensemble de constantes utilisateur est traité comme un tableau scalaire de valeurs 32 bits, indexable dynamiquement et en lecture seule à partir du nuanceur. En dehors des limites, l’indexation d’un ensemble donné de constantes racine génère des résultats indéfinis. En langage HLSL, les définitions de structure de données peuvent être fournies pour que les constantes utilisateur leur fournissent des types. Par exemple, si la signature racine définit un ensemble de 4 constantes racine, le langage HLSL peut superposer la structure suivante.
struct DrawConstants
{
uint foo;
float2 bar;
int moo;
};
ConstantBuffer<DrawConstants> myDrawConstants : register(b1, space0);
Les tableaux ne sont pas autorisés dans les mémoires tampons constantes qui sont mappées sur les constantes racine puisque l’indexation dynamique dans l’espace de signature racine n’est pas prise en charge. Par exemple, il n’est pas valide d’avoir une entrée dans la mémoire tampon constante telle que float myArray[2]; . Une mémoire tampon constante mappée aux constantes racine ne peut pas être un tableau ; par conséquent, il n’est pas valide de mapper à des cbuffer myCBArray[2] constantes racine.
Les constantes peuvent être partiellement définies. Par exemple, si la signature racine définit des valeurs 4 32 bits à RootTableBindSlot 2, tout sous-ensemble des quatre constantes peut être défini à la fois (les autres restent inchangées). Cela peut être utile dans les regroupements qui héritent de l’état de signature racine et peuvent être modifiés partiellement.
Lors de la définition de constantes, faites attention à la disposition de mémoire tampon constante attendue par le nuanceur. Il est possible que les constantes soient remplies dans vec4 les limites, par exemple. Pour vérifier la disposition attendue, vérifiez les informations de réflexion du nuanceur HLSL.
Les API suivantes (à partir de l’interface ID3D12GraphicsCommandList ) concernent la définition de constantes directement sur la signature racine :
- SetGraphicsRoot32BitConstant
- SetGraphicsRoot32BitConstants
- SetComputeRoot32BitConstant
- SetComputeRoot32BitConstants
Reportez-vous également à la structure des _ _ constantes racine D3D12 .