Freigeben über


D3D11_MAP-Enumeration (d3d11.h)

Gibt eine Ressource an, auf die von der CPU zum Lesen und Schreiben zugegriffen werden soll. Anwendungen können eines oder mehrere dieser Flags kombinieren.

Syntax

typedef enum D3D11_MAP {
  D3D11_MAP_READ = 1,
  D3D11_MAP_WRITE = 2,
  D3D11_MAP_READ_WRITE = 3,
  D3D11_MAP_WRITE_DISCARD = 4,
  D3D11_MAP_WRITE_NO_OVERWRITE = 5
} ;

Konstanten

 
D3D11_MAP_READ
Wert: 1
Die Ressource wird zum Lesen zugeordnet. Die Ressource muss mit Lesezugriff erstellt worden sein.
(siehe D3D11_CPU_ACCESS_READ).
D3D11_MAP_WRITE
Wert: 2
Die Ressource wird zum Schreiben zugeordnet. Die Ressource muss mit Schreibzugriff erstellt worden sein.
access (siehe D3D11_CPU_ACCESS_WRITE).
D3D11_MAP_READ_WRITE
Wert: 3
Die Ressource wird zum Lesen und Schreiben zugeordnet. Die Ressource muss mit Lese- und Schreibzugriff erstellt worden sein.
Zugriff (siehe D3D11_CPU_ACCESS_READ und D3D11_CPU_ACCESS_WRITE).
D3D11_MAP_WRITE_DISCARD
Wert: 4
Die Ressource wird zum Schreiben zugeordnet. der vorherige Inhalt der Ressource ist nicht definiert. Die Ressource muss mit Schreibzugriff erstellt worden sein.
und dynamische Nutzung (siehe D3D11_CPU_ACCESS_WRITE und D3D11_USAGE_DYNAMIC).
D3D11_MAP_WRITE_NO_OVERWRITE
Wert: 5
Die Ressource wird zum Schreiben zugeordnet. der vorhandene Inhalt der Ressource kann nicht überschrieben werden (siehe Hinweise). Dieses Flag ist nur für Scheitelpunkte und
Indexpuffer. Die Ressource muss mit Schreibzugriff erstellt worden sein (siehe D3D11_CPU_ACCESS_WRITE).
Kann nicht für eine Ressource verwendet werden, die mit dem D3D11_BIND_CONSTANT_BUFFER-Flag erstellt wurde.

Hinweis Die Direct3D 11.1-Runtime, die ab Windows 8 verfügbar ist, ermöglicht die Zuordnung dynamischer Konstantenpuffer und Shaderressourcensichten (SRVs) von dynamischen Puffern mit D3D11_MAP_WRITE_NO_OVERWRITE. Die Direct3D 11- und früheren Runtimes beschränkten die Zuordnung zu Vertex- oder Indexpuffern. Um festzustellen, ob ein Direct3D-Gerät diese Features unterstützt, rufen Sie ID3D11Device::CheckFeatureSupport mit D3D11_FEATURE_D3D11_OPTIONS auf. CheckFeatureSupport füllt Member einer D3D11_FEATURE_DATA_D3D11_OPTIONS-Struktur mit den Features des Geräts aus. Die relevanten Member hier sind MapNoOverwriteOnDynamicConstantBuffer und MapNoOverwriteOnDynamicBufferSRV.

 

Hinweise

Diese Enumeration wird in ID3D11DeviceContext::Map verwendet.

Bedeutung von D3D11_MAP_WRITE_NO_OVERWRITE

D3D11_MAP_WRITE_NO_OVERWRITE bedeutet, dass die Anwendung verspricht, nicht in Daten zu schreiben, die von der IA-Phase (Input Assembler) verwendet werden. Im Gegenzug ermöglicht die GPU der Anwendung, in andere Teile desselben Puffers zu schreiben. Die Anwendung muss sicherstellen, dass sie keine Daten überschreibt, die von der IA-Phase verwendet werden.

Betrachten Sie beispielsweise den Puffer, der im folgenden Diagramm dargestellt ist. Wenn ein Draw-Aufruf ausgegeben wurde, der die Scheitelpunkte 4 bis 6 verwendet, muss eine Anwendung, die Map in diesem Puffer aufruft, sicherstellen, dass sie nicht in die Scheitelpunkte schreibt, auf die der Draw-Aufruf während des Renderings zugreift.

Diagramm eines Puffers, der Scheitelpunkte in verschiedenen Nutzungsphasen enthält Es kann jedoch schwierig sein, dies sicherzustellen, da die GPU häufig viele Frames hinter der CPU liegt, in Bezug auf den Frame, den sie gerade verarbeitet. Das Nachverfolgen, welche Abschnitte einer Ressource aufgrund von Aufrufen vor 2 bis 5 Frames verwendet werden, ist schwierig und fehleranfällig. Aus diesem Grund wird empfohlen, dass Anwendungen nur in die nicht initialisierten Teile einer Ressource schreiben, wenn sie D3D11_MAP_WRITE_NO_OVERWRITE verwenden.

Allgemeine Verwendung von D3D11_MAP_WRITE_DISCARD mit D3D11_MAP_WRITE_NO_OVERWRITE

D3D11_MAP_WRITE_DISCARD und D3D11_MAP_WRITE_NO_OVERWRITE werden normalerweise in Verbindung mit dynamischen Index-/Vertexpuffern verwendet. D3D11_MAP_WRITE_DISCARD können auch mit dynamischen Texturen verwendet werden. Allerdings können D3D11_MAP_WRITE_NO_OVERWRITE nicht mit dynamischen Texturen verwendet werden.

Eine häufige Verwendung dieser beiden Flags umfasst das Auffüllen dynamischer Index-/Vertexpuffer mit Geometrie, die von der aktuellen Position der Kamera aus sichtbar ist. Wenn Daten zum ersten Mal in den Puffer eines bestimmten Frames eingegeben werden, wird Map mit D3D11_MAP_WRITE_DISCARD aufgerufen. Dadurch wird der vorherige Inhalt des Puffers ungültig. Der Puffer wird dann mit allen verfügbaren Daten gefüllt.

Nachfolgende Schreibvorgänge in den Puffer innerhalb desselben Frames sollten D3D11_MAP_WRITE_NO_OVERWRITE verwenden. Dadurch kann die CPU auf eine Ressource zugreifen, die möglicherweise von der GPU verwendet wird, solange die zuvor beschriebenen Einschränkungen eingehalten werden.

Anforderungen

Anforderung Wert
Header d3d11.h

Weitere Informationen

Ressourcenaufzählungen