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 |