Uso di costanti direttamente nella firma radice
Le applicazioni possono definire costanti radice nella firma radice, ognuna come set di valori a 32 bit. Vengono visualizzati in High Level Shading Language (HLSL) come buffer costante. Si noti che i buffer costanti per motivi cronologici vengono visualizzati come set di valori a 4x32 bit.
Ogni set di costanti utente viene considerato come matrice scalare di valori a 32 bit, indicizzati in modo dinamico e di sola lettura dal shader. L'indicizzazione di un determinato set di costanti radice non definisce i risultati. In HLSL le definizioni della struttura dei dati possono essere fornite per le costanti utente per assegnarle tipi. Ad esempio, se la firma radice definisce un set di 4 costanti radice, HLSL può sovrapporre la struttura seguente.
struct DrawConstants
{
uint foo;
float2 bar;
int moo;
};
ConstantBuffer<DrawConstants> myDrawConstants : register(b1, space0);
Le matrici non sono consentite nei buffer costanti che vengono mappate alle costanti radice poiché l'indicizzazione dinamica nello spazio della firma radice non è supportata. Ad esempio, non è valido avere una voce nel buffer costante, ad float myArray[2];
esempio . Un buffer costante mappato alle costanti radice non può essere una matrice; pertanto, non è valido eseguire il mapping cbuffer myCBArray[2]
in costanti radice.
Le costanti possono essere parzialmente impostate. Ad esempio, se la firma radice definisce quattro valori a 32 bit in RootTableBindSlot 2, qualsiasi subset delle quattro costanti può essere impostato alla volta (gli altri rimangono invariati). Ciò può essere utile nei bundle che ereditano lo stato della firma radice e possono modificarlo parzialmente.
Quando si impostano costanti, prestare attenzione al layout del buffer costante previsto dal shader. È possibile che le costanti siano spaziate ai vec4
limiti, ad esempio. Per verificare il layout previsto, controllare le informazioni sulla reflection dal shader HLSL.
Le API seguenti (dall'interfaccia ID3D12GraphicsCommandList ) sono per impostare costanti direttamente sulla firma radice:
- SetGraphicsRoot32BitConstant
- SetGraphicsRoot32BitConstants
- SetComputeRoot32BitConstant
- SetComputeRoot32BitConstants
Fare riferimento anche alla struttura D3D12_ROOT_CONSTANTS .
Argomenti correlati