Freigeben über


Shader Visible Descriptor Heaps

Shader visible descriptor heaps, are descriptor heaps that can be referenced by shader through descriptor tables.

Überblick

Deskriptor-Heaps, auf die von Shadern über Deskriptortabellen verwiesen werden kann, sind in einigen Varianten verfügbar: Ein Heaptyp, D3D12_SRV_UAV_CBV_DESCRIPTOR_HEAP, kann Shaderressourcenansichten, ungeordnete Zugriffsansichten und Konstantenpufferansichten enthalten, alle intermixt. Jeder angegebene Speicherort im Heap kann eine der aufgeführten Typen von Beschreibungen sein. Ein anderer Heaptyp, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, speichert nur Sampler und spiegelt die Tatsache wider, dass Sampler für den Großteil der Hardware separat von SRVs, UAVs, CBVs verwaltet werden.

Deskriptor heaps dieser Typen können angefordert werden, um shader sichtbar zu sein oder nicht, wenn der Heap erstellt wird (letzteres – nicht shader sichtbar - kann für Stagingdeskriptoren auf der CPU nützlich sein). Wenn der Shader sichtbar sein soll, kann jeder der oben genannten Heap-Typen eine Hardwaregrößenbeschränkung für jede einzelne Deskriptor-Heap-Zuordnung aufweisen.

Anwendungen können eine beliebige Anzahl von Deskriptor heaps erstellen, und nicht-Shader-Heaps sind nicht in der Größe eingeschränkt. Wenn ein shader visible descriptor heap, der von der Anwendung erstellt wird, kleiner als der Grenzwert für die Hardwaregröße ist, kann der Treiber den Heap des Deskriptors aus einem größeren zugrunde liegenden Deskriptor heap unterteilen, sodass mehrere API-Deskriptor heaps in einen Hardwaredeskriptor heap passen. Der Grund hierfür ist, dass für einen Hardwarewechsel zwischen Hardwaredeskriptor-Heaps während der Ausführung eine GPU-Wartezeit erforderlich ist (um sicherzustellen, dass GPU-Verweise auf den zuvor deskriptor heap abgeschlossen sind). Wenn alle Deskriptor heaps, die eine Anwendung erstellt, in die maximalen Kapazitäten des anwendbaren Hardware heaps passen, treten beim Wechseln von API-Deskriptor-Heaps während des Renderings keine solchen Wartezeiten auf. Anwendungen müssen jedoch die Möglichkeit zulassen, dass das Wechseln des aktuellen Deskriptor-Heaps zu einer Wartezeit im Leerlauf führen kann.

Um zu vermeiden, dass diese mögliche Wartezeit auf leerlauf auf dem Heap-Schalter des Deskriptors beeinträchtigt wird, können Anwendungen die Vorteile von Unterbrechungen beim Rendern nutzen, die dazu führen würden, dass die GPU aus anderen Gründen leer ist, da die Zeit zum Ausführen von Deskriptor-Heap-Schaltern besteht, da trotzdem eine Wartezeit für den Leerlauf stattfindet.

Der Mechanismus und die Semantik zum Identifizieren von Deskriptor heaps zu Shadern während der Befehlslisten-/Bundleaufzeichnung werden in der API-Referenz beschrieben.

Beispiel

Die folgende Abbildung zeigt zwei Deskriptor heaps, die auf zwei separate 2D-Texturen verweisen, die in zwei Slots eines großen Standardhaps gespeichert werden. Auf den deskriptor heap, der Shader sichtbar ist, kann über die Grafikpipeline (einschließlich der Shader) zugegriffen werden, und damit steht die 2D-Textur für die Pipeline zur Verfügung.

sichtbaren und nicht sichtbaren Deskriptor-Heaps

Anmerkung

Es gibt häufig eine Beschränkung der GPU-Hardware der Menge des lokalen GPU-Speichers, die von der CPU (als Schreib-kombinierter Speicher bezeichnet) für Deskriptor-Heaps geschrieben werden kann. Dieser Grenzwert beträgt in der Regel 96 MB für alle Prozesse. Ein Heap mit einer Million Memberdeskriptoren mit 32BYTE-Deskriptoren würde beispielsweise 32 MB verwenden. Der Treiber wird bei Bedarf auf den Systemspeicher zurückgesetzt, es empfiehlt sich jedoch, keine große Anzahl großer Deskriptor-Heaps zu erstellen.

 

Deskriptor Heaps