ID3D12Resource::WriteToSubresource-Methode (d3d12.h)

Verwendet die CPU zum Kopieren von Daten in eine Unterressource, sodass die CPU den Inhalt der meisten Texturen mit nicht definierten Layouts ändern kann.

Syntax

HRESULT WriteToSubresource(
                 UINT            DstSubresource,
  [in, optional] const D3D12_BOX *pDstBox,
  [in]           const void      *pSrcData,
                 UINT            SrcRowPitch,
                 UINT            SrcDepthPitch
);

Parameter

DstSubresource

Typ: UINT

Gibt den Index der Unterressource an.

[in, optional] pDstBox

Typ: const D3D12_BOX*

Ein Zeiger auf ein Feld, das den Teil der Zielunterressource definiert, in den die Ressourcendaten kopiert werden sollen. Wenn NULL, werden die Daten ohne Offset in die Zielunterressource geschrieben. Die Dimensionen der Quelle müssen dem Ziel entsprechen (siehe D3D12_BOX).

Ein leeres Feld führt zu einem No-Op. Ein Feld ist leer, wenn der obere Wert größer oder gleich dem unteren Wert oder der linke Wert größer oder gleich dem rechten Wert ist oder der vordere Wert größer oder gleich dem back-Wert ist. Wenn das Feld leer ist, führt diese Methode keinen Vorgang aus.

[in] pSrcData

Typ: const void*

Ein Zeiger auf die Quelldaten im Arbeitsspeicher.

SrcRowPitch

Typ: UINT

Der Abstand zwischen einer Zeile der Quelldaten und der nächsten Zeile.

SrcDepthPitch

Typ: UINT

Der Abstand von einem Tiefenslice der Quelldaten zum nächsten.

Rückgabewert

Typ: HRESULT

Diese Methode gibt einen der Direct3D 12-Rückgabecodes zurück.

Hinweise

Die Ressource sollte zuerst mithilfe von Map zugeordnet werden. Texturen müssen sich im D3D12_RESOURCE_STATE_COMMON Zustand befinden, damit der CPU-Zugriff über WriteToSubresource und ReadFromSubresource zulässig ist. Puffer jedoch nicht.

Stellen Sie aus Effizienzgründen sicher, dass die Grenzen und die Ausrichtung der Blöcke innerhalb des Felds horizontal ( 64 / [Bytes pro Pixel] ) Pixel sind. Vertikale Begrenzungen und Ausrichtung sollten 2 Zeilen betragen, außer wenn Formate mit 1 Byte pro Pixel verwendet werden. In diesem Fall werden 4 Zeilen empfohlen. Einzelne Tiefenslices pro Aufruf werden effizient verarbeitet. Es wird empfohlen, aber nicht notwendig, Zeiger und Schritte bereitzustellen, die 128 Byte ausgerichtet sind.

Beim Schreiben in untergeordnete Mipmap-Ebenen wird empfohlen, eine größere Breite und Höhe als oben beschrieben zu verwenden. Dies liegt daran, dass kleine Mipmap-Ebenen tatsächlich in einem größeren Speicherblock gespeichert werden können, mit einer undurchsichtigen Menge an Kompensation, die die Ausrichtung an Cachezeilen beeinträchtigen kann.

WriteToSubresource und ReadFromSubresource ermöglichen Optimierungen nahezu ohne Kopierzugriff für UMA-Adapter, können jedoch die Effizienz diskreter/NUMA-Adapter unerschwinglich beeinträchtigen, da sich die Texturdaten nicht im lokalen Videospeicher befinden können. Typische Anwendungen sollten sich an diskrete, freundliche Uploadtechniken halten, es sei denn, sie erkennen, dass die Adapterarchitektur UMA ist. Weitere Informationen zum Hochladen finden Sie unter CopyTextureRegion, und weitere Informationen zu UMA finden Sie unter D3D12_FEATURE_DATA_ARCHITECTURE.

Auf UMA-Systemen kann diese Routine verwendet werden, um die Kosten für das Kopieren von Arbeitsspeicher durch die Schleifenoptimierung, die als Schleifenkacheling bezeichnet wird, zu minimieren. Durch das Aufteilen des Uploads in Chucks, die bequem in den CPU-Cache passen, erreicht die effektive Bandbreite zwischen CPU und Standard Arbeitsspeicher theoretische Höchstwerte näher.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d12.h
Bibliothek D3d12.lib
DLL D3d12.dll

Weitere Informationen

ID3D12Resource

Unterressourcen