Freigeben über


Streamausgabe-Leistungsindikatoren

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

Unterschiede in stream counters 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 zugewiesen, und die einzige Möglichkeit für Anwendungen, diesen Wert zu bearbeiten, ist die SOSetTargets-Methode . In Direct3D 12 weisen Apps Arbeitsspeicher zu, um diesen aktuellen Speicherort zu speichern. Es gibt keine speziellen Methoden zum Bearbeiten dieses Werts, 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 wie die Ressource platziert werden, die die Datenstromausgabe enthält. Auf diesen Wert kann die GPU in der Streamausgabephase zugreifen, um zu bestimmen, wo neue Vertexdaten im Puffer angefügt werden sollen. Darüber hinaus wird von der GPU auf diesen Wert zugegriffen, 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 fällt in den von {OffsetInBytes, SizeInBytes} implizierten Bereich, wenn eine Ressource ungleich NULL 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 D3D12_ROOT_SIGNATURE_FLAGS-Flags verwendet wird.

D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT können 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 nicht das flag D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT festgelegt ist.

Wenn eine Ressource als Streamausgabeziel verwendet wird, müssen sich die verwendeten Ressourcen im D3D12_RESOURCE_STATE_STREAM_OUT Zustand befinden. Dies gilt sowohl für die Vertexdaten als auch für BufferFilledSize (die sich in denselben oder separaten Ressourcen befinden können).

Es gibt keine speziellen APIs zum Festlegen von Streamausgabepufferoffsets, da Anwendungen direkt mit der CPU oder GPU in bufferFilledSize schreiben können.

Indikatoren und Abfragen