Condividi tramite


Panoramica delle firme radice

Una firma radice viene configurata dall'app e collega gli elenchi di comandi alle risorse richieste dagli shader. L'elenco di comandi grafici ha sia una firma grafica che una radice di calcolo. Un elenco di comandi di calcolo avrà semplicemente una firma radice di calcolo. Queste firme radice sono indipendenti l'una dall'altra.

Parametri e argomenti radice

Una firma radice è simile a una firma della funzione API, determina i tipi di dati previsti dagli shader, ma non definisce la memoria o i dati effettivi. Un parametro radice è una voce nella firma radice. I valori effettivi dei parametri radice impostati e modificati in fase di esecuzione sono denominati argomenti radice. La modifica degli argomenti radice modifica i dati letti dagli shader.

Costanti radice, descrittori e tabelle

La firma radice può contenere tre tipi di parametri; costanti radice (costanti inlined negli argomenti radice), descrittori radice (descrittori inlinedi negli argomenti radice) e tabelle descrittori (puntatori a un intervallo di descrittori nell'heap del descrittore).

Le costanti radice sono valori inline a 32 bit che vengono visualizzati nello shader come buffer costante.

I descrittori radice inlined devono contenere descrittori a cui si accede più spesso, anche se è limitato a CBV e buffer UAV o SRV non elaborati o strutturati. Un tipo più complesso, ad esempio uno SRV con trama 2D, non può essere usato come descrittore radice. I descrittori radice non includono un limite di dimensioni, pertanto non possono essere presenti controlli out-of-bound, a differenza dei descrittori negli heap del descrittore, che includono una dimensione.

Le voci di tabella del descrittore all'interno delle firme radice contengono il descrittore, il nome di associazione dello shader HLSL e il flag di visibilità. Per informazioni dettagliate sui nomi degli shader, vedere Modello shader 5.1 . In alcuni hardware è possibile ottenere un miglioramento delle prestazioni solo rendendo visibili i descrittori alle fasi dello shader che le richiedono (fare riferimento a D3D12_SHADER_VISIBILITY).

voce della tabella del descrittore radice

Il layout della firma radice è abbastanza flessibile, con alcuni vincoli imposti su hardware meno in grado di supportare. Indipendentemente dal livello di hardware, le applicazioni devono sempre provare a rendere la firma radice più piccola in base alle esigenze per garantire la massima efficienza. Le applicazioni possono evitare la presenza di più tabelle di descrittore nella firma radice, ma meno spazio per le costanti radice o viceversa.

Il contenuto della firma radice (le tabelle del descrittore, le costanti radice e i descrittori radice) a cui l'applicazione ha associato viene automaticamente eseguito il controllo delle versioni dal driver D3D12 ogni volta che qualsiasi parte del contenuto cambia tra chiamate di disegno (grafica)/dispatch (calcolo). Ogni disegno/invio ottiene quindi un set completo univoco di stato della firma radice.

Idealmente, esistono gruppi di oggetti dello stato della pipeline che condividono la stessa firma radice. Dopo aver impostato una firma radice nella pipeline, tutte le associazioni che definisce (tabelle descrittori, descrittori, costanti) possono essere impostate o modificate singolarmente, inclusa l'ereditarietà in bundle.

Un'app può fare il proprio compromesso tra il numero di tabelle di descrittore desiderate rispetto ai descrittori inline (che richiedono più spazio, ma rimuovere un riferimento indiretto) rispetto alle costanti inline (che non hanno indiretto) che vogliono nella firma radice. Le applicazioni devono usare la firma radice il più possibile, basandosi sulla memoria controllata dall'applicazione, ad esempio heap e heap descrittori che puntano a tali dati per rappresentare i dati in blocco.

Firme radice