Für den Shader nicht sichtbare Deskriptorheaps

Einige Deskriptorheaps können von Shadern nicht über Deskriptortabellen referenziert werden, sind aber entweder vorhanden, um die App beim Staging der Deskriptoren vor dem Aufzeichnen 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 bearbeitet werden, abhängig vom Arbeitsspeicherpool und den CPU-Zugriffseigenschaften, die die Anwendung für einen Deskriptorheap auswählt.

Für Shader Visible Descriptor Heaps ist der offensichtliche Grund, den Shaderzugriff auf diese Deskriptorheaps zu verweigern, während sie bereitgestellt werden. Dann werden diese Heaps shader-sichtbar gemacht und über Deskriptortabellen bei der Ausführung der Befehlsliste zugegriffen. Es ist jedoch nicht erforderlich, shader-sichtbare Heaps zu inszenieren, sie können direkt aufgefüllt werden.

Andere Deskriptoren werden an die Pipeline gebunden, indem deren Inhalt direkt in der Befehlsliste aufgezeichnet wird. Diese Deskriptoren dienen nur zum Übersetzen der Ansichtsparameter zur Aufzeichnungszeit der Befehlsliste. Diese Heaps sind immer ohne Shader sichtbar und enthalten Folgendes.

  • Renderzielansichten (RTVs)
  • Tiefenschablonenansichten (DSVs)

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

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

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

Zusammenfassung

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

 

Deskriptorheaps