Panoramica delle firme di 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 di grafica che una firma radice di calcolo. Un elenco di comandi di calcolo avrà semplicemente una firma radice di calcolo. Queste firme radice sono indipendenti fra loro.
Parametri principali e argomenti
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 vengono chiamati argomenti radice. Modificare gli argomenti della radice modifica i dati letti dagli shader.
Costanti radice, descrittori e tabelle
La firma radice può contenere tre tipi di parametri: costanti radice (costanti integrati negli argomenti radice), descrittori radice (descrittori integrati negli argomenti radice) e tabelle di descrittori (puntatori a un intervallo di descrittori nell'heap dei descrittori).
Le costanti radice sono valori inline a 32 bit che vengono visualizzati nello shader come buffer costante.
I descrittori radice in-line devono contenere i descrittori che vengono accessi più frequentemente, sebbene siano limitati a CBV e a buffer UAV o SRV, siano essi 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, quindi non è possibile effettuare controlli fuori limite, a differenza dei descrittori negli heap dei descrittori, che includono un limite di dimensioni.
Le voci della tabella dei descrittori all'interno delle root signature contengono il descrittore, il nome di associazione dello shader HLSL e il flag di visibilità. Per informazioni dettagliate sui nomi dello shader, fare riferimento a 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).
Il layout della firma radice è abbastanza flessibile, con alcuni vincoli imposti su hardware meno idoneo. Indipendentemente dal livello di hardware, le applicazioni devono sempre provare a rendere la firma radice minima in base alle esigenze per garantire la massima efficienza. Le applicazioni possono scegliere tra avere più tabelle descrittori nella root signature e meno spazio per le costanti radice, o viceversa.
Il contenuto della firma radice (le tabelle del descrittore, le costanti radice e i descrittori radice) che l'applicazione ha associato viene versionato automaticamente dal driver D3D12 ogni volta che una parte del contenuto cambia tra le chiamate di disegno (grafica) e di dispatch (calcolo). Quindi, ogni estrazione/distribuzione ottiene un insieme completo e univoco di stato della firma radice.
Idealmente, esistono gruppi di oggetti dello stato della pipeline (PSO) che condividono la stessa firma radice. Dopo aver impostato una root signature nella pipeline, tutti i collegamenti che essa definisce (tabelle dei descrittori, descrittori, costanti) possono essere impostati o modificati singolarmente, incluse l'ereditarietà nei bundle.
Un'app può fare il proprio compromesso tra il numero di tabelle descrittori che vuole rispetto ai descrittori inline (che richiedono più spazio ma rimuovono un riferimento indiretto) rispetto alle costanti inline (che non hanno riferimento indiretto) che vogliono nella firma radice. Le applicazioni devono usare la firma radice il meno possibile, affidandosi invece alla memoria controllata dall'applicazione, come gli heap e gli heap del descrittore che vi puntano, per rappresentare dati in blocco.
Argomenti correlati