Streamausgabe-Leistungsindikatoren

Die Streamausgabe ist die Fähigkeit der GPU, Scheitelpunkte in einen Puffer zu schreiben. Die Streamausgabeindikatoren überwachen den Fortschritt.

Unterschiede bei Streamzählern von Direct3D 11 zu Direct3D 12

Im Rahmen des Streamausgabeprozesses muss die GPU den aktuellen Speicherort im Puffer kennen, in den sie schreibt. In Direct3D 11 wird der Speicher zum Speichern dieses Speicherorts vom Treiber belegt, und anwendungen können diesen Wert nur über die SOSetTargets-Methode bearbeiten. In Direct3D 12 belegen Apps Arbeitsspeicher, um diesen aktuellen Speicherort zu speichern. Es gibt keine besonderen Möglichkeiten, diesen Wert zu bearbeiten, und Apps können den Wert mit der CPU oder GPU lesen/schreiben.

BufferFilledSize

Die Anwendung ist für die Zuweisung von Speicher für eine 32-Bit-Menge namens BufferFilledSize verantwortlich. Dies enthält die Anzahl der Datenbytes im Streamausgabepuffer. Dieser Speicher kann in derselben oder einer anderen Ressource platziert werden wie die Ressource, die die Streamausgabedaten enthält. Auf diesen Wert wird von der GPU in der Streamausgabephase zugegriffen, um zu bestimmen, wo neue Scheitelpunktdaten im Puffer angefügt werden sollen. Darüber hinaus greift die GPU auf diesen Wert zu, um zu bestimmen, wann ein Überlauf aufgetreten ist.

Weitere Informationen finden Sie in der Struktur D3D12 _ STREAM _ OUTPUT _ DESC.

Die Debugebene überprüft Folgendes in ID3D12GraphicsCommandList::SOSetTargets:

  • BufferFilledSize liegt in dem Bereich, der von {OffsetInBytes, SizeInBytes} impliziert wird, wenn eine Nicht-NULL-Ressource angegeben wird.
  • BufferFilledSizeOffsetInBytes ist ein Vielfaches von 4.
  • BufferFilledSizeOffsetInBytes liegt innerhalb des Bereichs der enthaltenden Ressource.
  • Die angegebene Ressource ist ein Puffer.

Die Runtime überprüft nicht den Heaptyp, der dem Streamausgabepuffer zugeordnet ist, da die Streamausgabe in allen Heaptypen unterstützt wird.

Stammsignaturen müssen angeben, ob die Streamausgabe mithilfe der Flags D3D12 _ ROOT SIGNATURE _ _ FLAGS verwendet wird.

D3D12 _ ROOT SIGNATURE FLAG ALLOW STREAM OUTPUT kann für In _ _ _ _ _ HLSL erstellte Stammsignaturen auf ähnliche Weise wie die anderen Flags angegeben werden.

CreateGraphicsPipelineState schlägt fehl, wenn der geometry-Shader stream-output enthält, aber für die Stammsignatur das Flag D3D12 ROOT SIGNATURE FLAG ALLOW STREAM OUTPUT nicht _ _ festgelegt _ _ _ _ ist.

Wenn eine Ressource als Streamausgabeziel verwendet wird, müssen sich die verwendeten Ressourcen im Zustand D3D12 _ RESOURCE STATE STREAM OUT _ _ _ befinden. Dies gilt sowohl für die Scheitelpunktdaten als auch für BufferFilledSize (die sich in denselben oder separaten Ressourcen enthalten können).

Es gibt keine speziellen APIs zum Festlegen von Pufferoffsets für stream-output, da Anwendungen direkt mit der CPU oder GPU in BufferFilledSize schreiben können.

Leistungsindikatoren und Abfragen