Standardtexturzuordnung
Durch die Verwendung der standardmäßigen Texturzuordnung wird die Kopier- und Arbeitsspeicherauslastung reduziert, während Bilddaten zwischen GPU und CPU freigegeben werden. Es sollte jedoch nur in bestimmten Situationen verwendet werden. Das Standardmäßige Swizzle-Layout vermeidet das Kopieren oder Schwenken von Daten in mehreren Layouts.
Übersicht
Die Zuordnung von Standardtexturen sollte für Entwickler nicht die erste Wahl sein. Entwickler sollten zuerst diskret-GPU-freundlich programmieren (d.a. keinen CPU-Zugriff für die meisten Texturen haben und mit CopySubresourceRegion1 hochladen). In bestimmten Fällen können CPU und GPU jedoch so häufig mit denselben Daten interagieren, dass die Zuordnung von Standardtexturen hilfreich ist, um Energie zu sparen oder ein bestimmtes Design auf bestimmten Adaptern oder Architekturen zu beschleunigen. Anwendungen sollten diese Fälle erkennen und die unnötigen Kopien optimieren.
In D3D11.3 sind Texturen, die mit D3D11_TEXTURE_LAYOUT_UNDEFINED (einem Element der D3D11_TEXTURE_LAYOUT-Enumeration ) und ohne CPU-Zugriff erstellt wurden, am effizientesten für häufiges GPU-Rendering und Sampling. Bei Leistungstests sollten diese Texturen mit D3D11_TEXTURE_LAYOUT_UNDEFINED mit CPU-Zugriff und D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE mit CPU-Zugriff und D3D11_TEXTURE_LAYOUT_ROW_MAJOR für die adapterübergreifende Unterstützung verglichen werden.
Die Verwendung von D3D11_TEXTURE_LAYOUT_UNDEFINED mit CPU-Zugriff ermöglicht die Methoden WriteToSubresource, ReadFromSubresource, Map (ohne Anwendungszugriff auf Zeiger) und Unmap; kann jedoch die Effizienz des GPU-Zugriffs opfern. Die Verwendung D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE mit CPU-Zugriff ermöglicht WriteToSubresource, ReadFromSubresource, Map (die einen gültigen Zeiger auf die Anwendung zurückgibt) und Unmap. Es kann auch die Effizienz des GPU-Zugriffs mehr als D3D11_TEXTURE_LAYOUT_UNDEFINED mit CPU-Zugriff opfern.
Im Allgemeinen sollten Anwendungen die meisten Texturen als nur gpu-barrierefrei und mit D3D11_TEXTURE_LAYOUT_UNDEFINED erstellen.
Vor der Standardtexturfunktion für die Zuordnung gab es nur ein standardisiertes Layout für mehrdimensionale Daten: "linear", auch bekannt als "Zeilen-Haupt". Anwendungen sollten USAGE_STAGING und USAGE_DYNAMIC Texturen vermeiden, wenn der Kartenstandard verfügbar ist. Die USAGE_STAGING und USAGE_DYNAMIC Texturen verwenden das lineare Layout.
D3D11.3 (und D3D12) führen ein standardmäßiges mehrdimensionales Datenlayout ein. Dies erfolgt, um es mehreren Verarbeitungseinheiten zu ermöglichen, mit denselben Daten zu arbeiten, ohne die Daten zu kopieren oder die Daten zwischen mehreren Layouts zu wechseln. Ein standardisiertes Layout ermöglicht Effizienzsteigerungen durch Netzwerkeffekte und ermöglicht es Algorithmen, bei einem bestimmten Muster Kürzen vorzunehmen.
Beachten Sie jedoch, dass dieser Standard-Swizzle ein Hardwarefeature ist und möglicherweise nicht von allen GPUs unterstützt wird.
D3D11.3-APIs
Im Gegensatz zu D3D12 unterstützt D3D11.3 standardmäßig keine Texturzuordnung, sodass Sie D3D11_FEATURE_DATA_D3D11_OPTIONS2 abfragen müssen. Standard swizzle muss auch mit einem Aufruf von ID3D11Device::CheckFeatureSupport abgefragt werden und das StandardSwizzle64KBSupported
Feld von D3D11_FEATURE_DATA_D3D11_OPTIONS2.
Die folgenden APIs verweisen auf die Texturzuordnung:
Enumerationen
- D3D11_TEXTURE_LAYOUT : Steuert das Swizzle-Muster von Standardtexturen und aktiviert die Kartenunterstützung für Standardtexturen.
- D3D11_FEATURE : verweist D3D11_FEATURE_DATA_D3D11_OPTIONS2.
- D3D11_TILE_COPY_FLAG : Enthält Flags zum Kopieren von geschwommenen kachelnden Ressourcen in und aus linearen Puffern.
Strukturen
- D3D11_TEXTURE2D_DESC1 : beschreibt eine 2D-Textur. Beachten Sie die CD3D11_TEXTURE2D_DESC1 Hilfsstruktur.
- D3D11_TEXTURE3D_DESC1 : beschreibt eine 3D-Textur. Beachten Sie die CD3D11_TEXTURE3D_DESC1 Hilfsstruktur.
Methoden
- ID3D11Device3::CreateTexture2D1 : erstellt ein Array von 2D-Texturen.
- ID3D11Device3::CreateTexture3D1 : erstellt eine einzelne 3D-Textur.
- ID3D11Device3::WriteToSubresource : kopiert Daten in eine D3D11_USAGE_DEFAULT Textur, die mithilfe von Map zugeordnet wurde.
- ID3D11Device3::ReadFromSubresource : kopiert Daten aus einer D3D11_USAGE_DEFAULT Textur, die mithilfe von Map zugeordnet wurde.
- ID3D11DeviceContext::Map : Ruft einen Zeiger auf die in einer Unterressource enthaltenen Daten ab und verweigert den GPU-Zugriff auf diese Unterressource.
- ID3D11DeviceContext::Unmap : ungültigt den Zeiger auf eine Ressource und aktiviert den Zugriff der GPU auf diese Ressource erneut.
- ID3D11Texture2D1::GetDesc1 : ruft die Eigenschaften einer 2D-Texturressource ab.
- ID3D11Texture3D1::GetDesc1 : ruft die Eigenschaften einer 3D-Texturressource ab.
Zugehörige Themen