Limiti di firma radice
La firma radice è il patrimonio immobiliare principale e ci sono limiti e costi rigorosi da considerare.
Limiti e costi di memoria
La dimensione massima di una firma radice è di 64 DWORD.
Questa dimensione massima viene scelta per evitare abusi della firma radice come modo per archiviare i dati in blocco. Ogni voce nella firma radice ha un costo per questo limite DWORD di 64:
- Le tabelle del descrittore costano 1 DWORD ciascuno.
- Le costanti radice costano 1 DWORD ognuna, perché sono valori a 32 bit.
- I descrittori radice (indirizzi virtuali GPU a 64 bit) costano 2 DWORD ciascuno.
I campionatori statici non hanno alcun costo per le dimensioni della firma radice.
Costi delle prestazioni
Il costo delle prestazioni (in termini di livelli di riferimento indiretto) è zero per una costante radice, 1 per un descrittore radice e 2 per una tabella del descrittore. Se una firma radice è di grandi dimensioni ed esce dalla memoria più veloce in una memoria leggermente più lenta (che può verificarsi in alcuni hardware), aggiungere 1 al costo delle prestazioni per gli elementi di overflow alla fine della firma radice.
Un overflow può verificarsi nell'hardware che potrebbe avere, ad esempio, una dimensione fissa di 16 DWORD per lo spazio degli argomenti radice. Questo limite potrebbe essere ulteriormente ridotto di uno se viene usato l'assembler di input. In questo caso si verifica un overflow in una memoria leggermente più lenta se la firma radice è troppo grande per la memoria nativa 15 o 16 DWORD. In altri hardware non è presente memoria dell'argomento radice nativa fissa (quindi la situazione di overflow non si verifica mai).
Per tutti gli hardware, se viene modificato un argomento radice, il driver deve mantenere una versione di tutti gli argomenti radice (a differenza di altre risorse di archiviazione, ad esempio heap descrittori e risorse di buffer, che non vengono usate dal driver). Nell'hardware in cui si verifica una situazione di overflow, è necessario controllare il controllo delle versioni solo l'area nativa o di overflow, a seconda della posizione in cui si è verificata la modifica. La quantità di controllo delle versioni dovrebbe ovviamente essere mantenuta al minimo necessario.
In genere, considerare le linee guida seguenti:
- Usare una piccola firma radice in base alle esigenze, anche se bilanciare questa operazione con la flessibilità di una firma radice più grande.
- Disporre i parametri in una firma radice di grandi dimensioni in modo che i parametri cambino spesso o, se la latenza di accesso basso per un determinato parametro è importante, si verificano per primi.
- Se è utile, usare costanti radice o viste del buffer costante radice per inserire visualizzazioni buffer costanti in un heap del descrittore.
Campionatori statici
Gli esempi statici (campionatori in cui lo stato è completamente definito e non modificabile) fanno parte delle firme radice, ma non vengono conteggiati per il limite DWORD 64. Se un campionatore può essere definito come statico, non è necessario che il campionatore faccia parte di un heap del descrittore.
Non sono previsti costi di prestazioni per l'uso di campionatori statici e una firma radice può contenere una combinazione di campionatori statici (archiviati nella firma radice o in spazio riservato in alcuni hardware) e campioni dinamici (archiviati in un heap del descrittore di campionatore). I campionatori in un heap descrittore possono essere assegnati dinamicamente e indicizzati, che non possono essere indicizzati.
Gli esempi statici possono essere scritti come parte della firma radice negli shader HLSL (vedere Specifica delle firme radice in HLSL).
Argomenti correlati