Festlegen und Auffüllen von Deskriptorheaps

Die Deskriptor-Heaptypen, die in einer Befehlsliste festgelegt werden können, sind diejenigen, die Deskriptoren enthalten, für die Deskriptortabellen verwendet werden können (jeweils jeweils jeweils).

Festlegen von Deskriptor-Heaps

Die Typen von Deskriptor-Heaps, die in einer Befehlsliste festgelegt werden können, sind:

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER

Die in der Befehlsliste festgelegten Heaps müssen auch als Shader sichtbar erstellt worden sein. Es gibt drei Arten von Befehlsliste: DIRECT, BUNDLE und COMPUTE.

Nachdem ein Deskriptor-Heap in einer Befehlsliste festgelegt wurde, beziehen sich nachfolgende Aufrufe, die Deskriptortabellen definieren, auf den aktuellen Deskriptor-Heap. Der Tabellenzustand der Deskriptortabelle wird am Anfang einer Befehlsliste nicht definiert, und nach dem Ändern von Deskriptor-Heaps in einer Befehlsliste. Redundantes Festlegen desselben Deskriptor-Heaps führt nicht dazu, dass Deskriptortabelleneinstellungen nicht definiert werden.

Im Gegensatz dazu können die Deskriptor-Heaps nur einmal festgelegt werden (redundante Aufrufe, die denselben Heap zweimal festlegen, erzeugen keinen Fehler); andernfalls ist das Verhalten nicht definiert. Die deskriptor-Heaps, die festgelegt werden, müssen dem Zustand entsprechen, wenn eine Befehlsliste das Bundle aufruft; andernfalls ist das Verhalten nicht definiert. Dadurch können Bündel die Tabelleneinstellungen der Befehlsliste erben und bearbeiten. Bundles, die keine Deskriptortabellen ändern (nur sie erben), müssen keinen Deskriptor-Heap überhaupt festlegen und nur von der aufrufenden Befehlsliste erben.

Wenn Deskriptor-Heaps festgelegt werden (mithilfe von ID3D12GraphicsCommandList::SetDescriptorHeaps), werden alle verwendeten Heaps in einem einzelnen Aufruf festgelegt (und alle zuvor festgelegten Heaps werden vom Aufruf nicht festgelegt). Höchstens ein Heap jedes oben aufgeführten Typs kann im Anruf festgelegt werden.

Auffüllen von Deskriptor-Heaps

Nachdem eine Anwendung einen Deskriptor-Heap erstellt hat, kann es dann Methoden auf dem Gerät verwenden, um Deskriptoren direkt in den Heap zu generieren oder Deskriptoren von einer Stelle in eine andere zu kopieren.

Der anfängliche Inhalt des Deskriptor-Heapspeichers ist nicht definiert, sodass die GPU oder der Treiber aufgefordert werden, auf nicht initialisierte Arbeitsspeicher für das Rendern zu verweisen, kann zu nicht definierten Ergebnissen führen, z. B. eine Gerätezurücksetzung.

Wenn die Anwendung einen Deskriptor-Heap so konfiguriert, dass er CPU sichtbar ist, kann die CPU Methoden aufrufen, um Deskriptoren in den Heap zu erstellen und von Ort zu Ort zu kopieren (einschließlich über Heaps) direkt, frei threaded. Wenn der Heap als SHADER_VISIBLE konfiguriert wurde, ist das Lesen durch die CPU nicht zulässig.

Deskriptorheaps