Freigeben über


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

Strukturen

Methoden

Direct3D 11.3-Features