Limiti di firma radice

La firma radice è prime real estate e ci sono limiti e costi rigorosi da considerare.

Limiti di memoria e costi

Le dimensioni massime di una firma radice sono 64 DWORD.

Questa dimensione massima viene scelta per evitare l'abuso della firma radice come modo per archiviare i dati bulk. Ogni voce nella firma radice ha un costo per questo limite DWORD di 64:

  • Le tabelle descrittori costano 1 DWORD ogni.
  • Le costanti radice costano 1 DWORD, poiché sono valori a 32 bit.
  • I descrittori radice (indirizzi virtuali gpu a 64 bit) costano 2 DWORD ciascuno.

Gli esempi statici non hanno alcun costo nella dimensione della firma radice.

Costi delle prestazioni

Il costo delle prestazioni (in termini di livelli di indiretto) è zero per una costante radice, 1 per un descrittore radice e 2 per una tabella descrittore. Se una firma radice è grande e supera la memoria più veloce nella memoria leggermente più lenta (che può verificarsi su un hardware), aggiungere 1 al costo delle prestazioni per gli elementi di overflow alla fine della firma radice.

Un overflow può verificarsi sull'hardware che potrebbe avere, ad esempio, una dimensione fissa di 16 DWORD per lo spazio degli argomenti radice. Questo limite potrebbe essere ulteriormente ridotto per uno se viene usato l'assembler di input. In questo caso è presente un overflow in memoria leggermente più lenta se la firma radice è troppo grande per la memoria nativa 15 o 16 DWORD. In altri hardware non è presente memoria di argomento radice nativa fissa (quindi la situazione di overflow non si verifica mai).

Per tutti gli hardware, se viene modificato qualsiasi argomento radice, il driver deve mantenere una versione di tutti gli argomenti radice (a differenza di altre risorse di archiviazione, ad esempio heaps descrittori e risorse buffer, che non vengono versioni dal driver). Nell'hardware che si verifica una situazione di overflow, è necessario eseguire la versione solo dell'area nativa o overflow, a seconda della posizione in cui si è verificata la modifica. La quantità di controllo delle versioni deve ovviamente essere mantenuta al minimo necessario.

In genere, prendere in considerazione 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 ridotta per un determinato parametro è importante, verificarsi prima di tutto.
  • Se è utile, usare costanti radice o viste buffer costanti radice per inserire viste buffer costanti in un heap descrittore.

Esempi statici

Esempi statici (esempi in cui lo stato è completamente definito e non modificabile) fanno parte delle firme radice, ma non conteggiano verso il limite DWORD 64. Se un sampler può essere definito come statico, non è necessario che il sampler faccia parte di un heap descrittore.

Non è previsto alcun costo delle prestazioni per l'uso di sampler statici e una firma radice può contenere una combinazione di sampler statici (archiviati nella firma radice o nello spazio riservato in alcuni hardware) e esempi dinamici (archiviati in un heap del descrittore di sampler). Gli esempi in un heap descrittore possono essere assegnati dinamicamente e indicizzati, che gli esempi statici non possono.

Gli esempi statici possono essere scritti come parte della firma radice negli shader HLSL (vedere Specificare le firme radice in HLSL).

Firme radice