D3D11_USAGE-Enumeration (d3d11.h)
Identifiziert die erwartete Ressourcennutzung während des Renderings. Die Nutzung spiegelt direkt wider, ob die CPU und/oder die Grafikverarbeitungseinheit (GPU) auf eine Ressource zugreifen kann.
Syntax
typedef enum D3D11_USAGE {
D3D11_USAGE_DEFAULT = 0,
D3D11_USAGE_IMMUTABLE = 1,
D3D11_USAGE_DYNAMIC = 2,
D3D11_USAGE_STAGING = 3
} ;
Konstanten
D3D11_USAGE_DEFAULT Wert: 0 Eine Ressource, die Lese- und Schreibzugriff durch die GPU erfordert. Dies ist wahrscheinlich die am häufigsten verwendete Wahl. |
D3D11_USAGE_IMMUTABLE Wert: 1 Eine Ressource, die nur von der GPU gelesen werden kann. Es kann nicht von der GPU geschrieben werden, und die CPU kann überhaupt nicht darauf zugreifen. Dieser Ressourcentyp muss beim Erstellen initialisiert werden, da er nach der Erstellung nicht mehr geändert werden kann. |
D3D11_USAGE_DYNAMIC Wert: 2 Eine Ressource, auf die sowohl die GPU (schreibgeschützt) als auch die CPU (schreibgeschützt) zugreifen kann. Eine dynamische Ressource ist eine gute Wahl für eine Ressource, die von der CPU mindestens einmal pro Frame aktualisiert wird. Verwenden Sie zum Aktualisieren einer dynamischen Ressource eine Map-Methode . Informationen zur Verwendung dynamischer Ressourcen finden Sie unter Vorgehensweise: Verwenden dynamischer Ressourcen. |
D3D11_USAGE_STAGING Wert: 3 Eine Ressource, die die Datenübertragung (Kopieren) von der GPU an die CPU unterstützt. |
Hinweise
Eine Anwendung gibt in einer Ressourcenbeschreibung an, wie eine Ressource verwendet werden soll (ihre Verwendung). Es gibt mehrere Strukturen zum Erstellen von Ressourcen: D3D11_TEXTURE1D_DESC, D3D11_TEXTURE2D_DESC, D3D11_TEXTURE3D_DESC und D3D11_BUFFER_DESC.
Unterschiede zwischen Direct3D 9 und Direct3D 10/11: In Direct3D 9 geben Sie den Typ des Arbeitsspeichers an, in dem eine Ressource zur Zeit der Ressourcenerstellung (mithilfe von D3DPOOL) erstellt werden soll. Es war die Aufgabe einer Anwendung, zu entscheiden, welcher Speicherpool die beste Kombination aus Funktionalität und Leistung bietet. In Direct3D 10/11 gibt eine Anwendung nicht mehr an, in welchem Arbeitsspeichertyp (dem Pool) eine Ressource erstellt werden soll. Stattdessen geben Sie die beabsichtigte Verwendung der Ressource an und lassen die Runtime (in Zusammenarbeit mit dem Treiber und einem Speicher-Manager) den Speichertyp auswählen, der die beste Leistung erzielt. |
Ressourcennutzungseinschränkungen
Jede Nutzung diktiert einen Kompromiss zwischen der Barrierefreiheit für die CPU und der Barrierefreiheit für die GPU. Im Allgemeinen bedeutet der Zugriff mit höherer Leistung für einen dieser beiden Prozessoren den Zugriff für den anderen. Bei beiden Extrembedingungen sind die D3D11_USAGE_DEFAULT - und D3D11_USAGE_STAGING-Nutzungen . D3D11_USAGE_DEFAULT beschränkt den Zugriff fast vollständig auf die GPU. D3D11_USAGE_STAGING beschränkt den Zugriff fast vollständig auf die CPU und lässt nur eine Datenübertragung (Kopie) einer Ressource zwischen gpu und CPU zu. Sie können diese Kopiervorgänge über die Methoden ID3D11DeviceContext::CopySubresourceRegion und ID3D11DeviceContext::CopyResource ausführen. Sie können diese Kopiermethoden auch verwenden, um Daten zwischen zwei Ressourcen derselben Verwendung zu kopieren. Sie können auch die ID3D11DeviceContext::UpdateSubresource-Methode verwenden, um Arbeitsspeicher direkt aus einem CPU-bereitgestellten Zeiger auf eine beliebige Ressource zu kopieren, am nützlichsten eine Ressource mit D3D11_USAGE_DEFAULT.D3D11_USAGE_DYNAMIC Nutzung ist ein Sonderfall, der den Datenfluss von der CPU zur GPU optimiert, wenn die CPU diese Daten on-the-fly generiert und diese Daten mit hoher Häufigkeit sendet. D3D11_USAGE_DYNAMIC wird in der Regel für Ressourcen mit Scheitelpunktdaten und konstanten Puffern verwendet. Verwenden Sie die Methoden ID3D11DeviceContext::Map und ID3D11DeviceContext::Unmap , um Daten in diese Ressourcen zu schreiben. Verwenden Sie die D3D11_MAP_WRITE_NO_OVERWRITE - und D3D11_MAP_WRITE_DISCARD Sequenz, um die höchste Leistung für serielle Daten wie Vertexdaten zu erzielen. Weitere Informationen zu dieser Sequenz finden Sie unter Allgemeine Verwendung von D3D11_MAP_WRITE_DISCARD mit D3D11_MAP_WRITE_NO_OVERWRITE.
D3D11_USAGE_IMMUTABLE Verwendung ist ein weiterer Sonderfall, der dazu führt, dass die GPU daten nur einmal generiert, wenn Sie eine Ressource erstellen. D3D11_USAGE_IMMUTABLE eignet sich gut für Daten wie Texturen, da diese Daten in der Regel aus einem Dateiformat in den Arbeitsspeicher eingelesen werden. Wenn Sie also eine Textur mit D3D11_USAGE_IMMUTABLE erstellen, liest die GPU diese Textur direkt in den Arbeitsspeicher ein.
Verwenden Sie die folgende Tabelle, um die Verwendung auszuwählen, die am besten beschreibt, wie die CPU und/oder die GPU auf die Ressource zugreifen muss. Natürlich gibt es Leistungseinbußen.
Resource Usage | Standard | Dynamisch | Unveränderlich | Staging |
---|---|---|---|---|
GPU-Read | ja | ja | ja | ja¹ |
GPU-Write | ja | ja¹ | ||
CPU-Read | ja¹ | |||
CPU-Write | ja | ja¹ |
1 : Gpu-Lese- oder Schreibvorgänge einer Ressource mit der D3D11_USAGE_STAGING Nutzung sind auf Kopiervorgänge beschränkt. Für diese Kopiervorgänge verwenden Sie ID3D11DeviceContext::CopySubresourceRegion und ID3D11DeviceContext::CopyResource . Da Tiefenschablonenformate und Multisampellayouts Implementierungsdetails eines bestimmten GPU-Designs sind, kann das Betriebssystem diese Formate und Layouts nicht allgemein für die CPU verfügbar machen. Daher können Stagingressourcen kein Tiefenschablonenpuffer oder mehrsampiges Renderziel sein.
Ressourcenbindungsoptionen
Um die Leistung zu maximieren, können nicht alle Ressourcennutzungsoptionen als Eingabe- oder Ausgaberessourcen für die Pipeline verwendet werden. In dieser Tabelle werden diese Einschränkungen beschrieben.Ressource kann als gebunden werden | Standard | Dynamisch | Unveränderlich | Staging |
---|---|---|---|---|
Eingabe in eine Phase | ja² | ja³ | ja | |
Ausgabe aus einer Phase | ja² |
- 2 : Wenn sie als Eingabe und Ausgabe mit unterschiedlichen Ansichten gebunden ist, muss jede Ansicht unterschiedliche Unterressourcen verwenden.
- 3 : Die Ressource kann nur mit einer einzelnen Unterressource erstellt werden. Die Ressource darf kein Texturarray sein. Die Ressource darf keine mipmap-Kette sein.
Anforderungen
Anforderung | Wert |
---|---|
Header | d3d11.h |