Utilisation des constantes directement dans la signature racine
Les applications peuvent définir des constantes racines dans la signature racine, chacune sous la forme d’un ensemble de valeurs 32 bits. Ils apparaissent dans le 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 vues comme des ensembles de valeurs 4 x 32 bits.
Chaque ensemble de constantes utilisateur est traité comme un tableau scalaire de valeurs de 32 bits, indexable dynamiquement et en lecture seule à partir du nuanceur. L’indexation hors limites d’un ensemble donné de constantes racines produit des résultats non définis. Dans HLSL, des définitions de structure de données peuvent être fournies pour que les constantes utilisateur leur donnent des types. Par exemple, si la signature racine définit un ensemble de 4 constantes racines, HLSL peut y 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 mappées aux constantes racines, car 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 comme float myArray[2];
. Une mémoire tampon constante mappée à des constantes racines ne peut pas être elle-même un tableau ; Par conséquent, il n’est pas valide de mapper cbuffer myCBArray[2]
dans des constantes racines.
Les constantes peuvent être partiellement définies. Par exemple, si la signature racine définit quatre valeurs 32 bits dans 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 bundles qui héritent de l’état de signature racine et peuvent le modifier partiellement.
Lorsque vous définissez des constantes, faites attention à la disposition de la mémoire tampon constante attendue par le nuanceur. Il est possible que les constantes soient complétées en vec4
limites, par exemple. Pour vérifier la disposition attendue, case activée les informations de réflexion du nuanceur HLSL.
Les API suivantes (à partir de l’interface ID3D12GraphicsCommandList ) permettent de définir des constantes directement sur la signature racine :
- SetGraphicsRoot32BitConstant
- SetGraphicsRoot32BitConstants
- SetComputeRoot32BitConstant
- SetComputeRoot32BitConstants
Reportez-vous également à la structure D3D12_ROOT_CONSTANTS .
Rubriques connexes