Übersicht über Deskriptortabellen

Jede Deskriptortabelle speichert Deskriptoren eines oder mehrerer Typen — von SRVs, UAVs, CBVs und Samplern. Eine Deskriptortabelle ist keine Speicherbelegung. Es handelt sich lediglich um einen Offset und eine Länge in einem Deskriptorheap.

Verweisen auf Deskriptortabellen

Die Grafikpipeline erhält über die Stammsignatur Zugriff auf Ressourcen, indem sie nach Index in Deskriptortabellen verweist.

Eine Deskriptortabelle ist eigentlich nur ein Unterbereich eines Deskriptorheaps. Deskriptorheaps stellen die zugrunde liegende Speicherbelegung für eine Auflistung von Deskriptoren dar. Da die Speicherbelegung eine Eigenschaft eines Deskriptorheaps ist, ist das Definieren einer Deskriptortabelle aus einer Tabelle garantiert so kostengünstig wie die Identifizierung eines Bereichs im Heap für die Hardware. Deskriptortabellen müssen nicht auf API-Ebene erstellt oder zerstört werden. Sie werden den Treibern lediglich als Offset und Größe aus einem Heap identifiziert, wenn darauf verwiesen wird.

Es ist durchaus möglich, dass eine App sehr große Deskriptortabellen definiert, wenn ihre Shader die Auswahl aus einer großen Menge verfügbarer Deskriptoren (die häufig auf Texturen verweisen) während der Zeit (möglicherweise durch Materialdaten gesteuert) auswählen möchten.

Die Stammsignatur verweist auf den Deskriptortabelleneintrag mit einem Verweis auf den Heap, der Startposition der Tabelle (einem Offset vom Anfang des Heaps) und der Länge (in Einträgen) der Tabelle. Die folgende Abbildung zeigt diese Konzepte: die Deskriptortabellenzeiger aus der Stammsignatur und die Deskriptoren im Deskriptorheap, die auf die vollständige Textur oder die Pufferdaten in einem Heap verweisen (im Fall einer Textur der Standardheap).

Deskriptortabellen