Für den Shader nicht sichtbare Deskriptorheaps

Auf einige Deskriptorheaps kann von Shadern nicht über Deskriptortabellen verwiesen werden, sie sind jedoch entweder vorhanden, um die App beim Staging der Deskriptoren vor der Aufzeichnung einer Befehlsliste zu unterstützen, oder weil kein shader-sichtbarer Heap erforderlich ist.

Nicht sichtbare Ansichten

Alle Deskriptorheaps, einschließlich der zuvor beschriebenen Shader-Deskriptorheaps, können von den CPU- und/oder Befehlslisten abhängig vom Speicherpool und den CPU-Zugriffseigenschaften bearbeitet werden, die die Anwendung für einen Deskriptorheap auswählt.

Für Shader Visible Descriptor Heapsist der offensichtliche Grund, shader den Zugriff auf diese Deskriptorheaps zu verweigern, während sie ge staget werden. Anschließend werden diese Heaps als Shader sichtbar gemacht und greifen bei der Ausführung der Befehlsliste über Deskriptortabellen darauf zu. Es ist jedoch nicht erforderlich, für Shader sichtbare Heaps zu stagen, da sie direkt aufgefüllt werden können.

Andere Deskriptoren werden an die Pipeline gebunden, indem ihre Inhalte direkt in der Befehlsliste aufgezeichnet werden. Diese Deskriptoren dienen nur dazu, die Ansichtsparameter zum Zeitpunkt des Befehlslisten-Datensatzes zu übersetzen. Diese Heaps sind immer nicht als Shader sichtbar und enthalten Folgendes.

  • Renderzielansichten (RTVs)
  • Tiefenschablonenansichten (DSVs)

Indexpuffersichten (IBVs), Vertexpuffersichten (VBVs) und Streamausgabesichten (Stream Output Views, SOVs) werden direkt an API-Methoden übergeben und weisen keine bestimmten Heaptypen auf.

Nach der Aufzeichnung in der Befehlsliste (z. B. mit einem Aufruf wie OMSetRenderTargets)steht der Arbeitsspeicher, der zum Speichern der Deskriptoren für diesen Aufruf verwendet wird, sofort zur erneuten Verwendung nach dem Aufruf zur Verfügung.

Selbst Deskriptortabellen verfügen über Optionen, bei denen eine App es der Implementierung ermöglichen kann, den Tabelleninhalt bei der Befehlslistenaufzeichnung aufzuzeichnen (anstatt den Tabellenzeiger bei der Ausführung zu dereferenzieren).

Zusammenfassung

Shader sichtbar, nur CPU-Schreibvorgang Nicht-Shader sichtbar, CPU-Lese-/Schreibzugriff
CBV, SRV, UAV ja ja
SAMPLER ja ja
RTV nein ja
DSV nein ja

Deskriptorheaps