Cenni preliminari sulle tabelle del descrittore

Ogni tabella del descrittore archivia i descrittori di uno o più tipi, ovvero SRV, UAV, CBV e campionatori. Una tabella descrittore non è un'allocazione di memoria; è semplicemente un offset e una lunghezza in un heap descrittore.

Riferimento alle tabelle del descrittore

La pipeline grafica, tramite la firma radice, ottiene l'accesso alle risorse facendo riferimento alle tabelle del descrittore per indice.

Una tabella del descrittore è in realtà solo un intervallo secondario di un heap del descrittore. Gli heap descrittori rappresentano l'allocazione di memoria sottostante per una raccolta di descrittori. Poiché l'allocazione di memoria è una proprietà di creazione di un heap di descrittore, la definizione di una tabella descrittore su uno di essi è garantita un'operazione economica quanto l'identificazione di un'area nell'heap nell'hardware. Le tabelle descrittori non devono essere create o eliminate definitivamente a livello di API, ma vengono semplicemente identificate come offset e dimensioni fuori da un heap ogni volta che viene fatto riferimento.

È certamente possibile che un'app definiscano tabelle descrittori molto grandi quando i suoi shader vogliono la libertà di selezionare da un vasto set di descrittori disponibili (spesso facendo riferimento a trame) in tempo reale (forse guidati dai dati materiali).

La firma radice fa riferimento alla voce della tabella del descrittore con un riferimento all'heap, alla posizione iniziale della tabella (offset dall'inizio dell'heap) e alla lunghezza (in voci) della tabella. L'immagine seguente illustra questi concetti: i puntatori di tabella del descrittore dalla firma radice e i descrittori all'interno dell'heap descrittore che fanno riferimento ai dati completi della trama o del buffer in un heap (nel caso di una trama, l'heap predefinito).

tabelle del descrittore