Standardtexturzuordnung

Die Verwendung der Standardtexturzuordnung reduziert die Kopier- und Arbeitsspeicherauslastung, während Bilddaten zwischen GPU und CPU freigegeben werden. Sie sollte jedoch nur in bestimmten Situationen verwendet werden. Das standardmäßige Swizzlelayout vermeidet das Kopieren oder Wischen von Daten in mehreren Layouts.

Überblick

Das Zuordnen von Standardtexturen sollte für Entwickler nicht die erste Wahl sein. Entwickler sollten zuerst diskret-GPU-freundlichen Code erstellen (d. b. keinen CPU-Zugriff für den Großteil der Texturen haben und mit CopySubresourceRegion1hochladen). In bestimmten Fällen interagieren CPU und GPU jedoch möglicherweise so häufig mit denselben Daten, 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 Member der D3D11 _ TEXTURE _ LAYOUT-Enumeration) und ohne CPU-Zugriff erstellt wurden, die effizienteste Für häufige GPU-Renderings und Samplings. 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 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 beeinträchtigen. Die Verwendung von D3D11 _ TEXTURE _ LAYOUT _ 64K _ STANDARD _ SWIZZLE mit CPU-Zugriff ermöglicht WriteToSubresource, ReadFromSubresource, Map (gibt einen gültigen Zeiger auf die Anwendung zurück) und Unmap. Sie kann auch die Effizienz des GPU-Zugriffs mehr als D3D11 _ TEXTURE _ LAYOUT _ UNDEFINED mit CPU-Zugriff abkraften.

Im Allgemeinen sollten Anwendungen den Großteil der Texturen als nur gpu-zugänglich und mit D3D11 _ TEXTURE _ LAYOUT _ UNDEFINED erstellen.

Vor der Standardtexturfunktion der Zuordnung gab es nur ein standardisiertes Layout für mehrdimensionale Daten: "linear", auch als "Zeilen-Hauptversion" bezeichnet. Anwendungen sollten USAGE _ STAGING- und USAGE _ DYNAMIC-Texturen vermeiden, wenn der Kartenstandard verfügbar ist. Die _ TEXTUREn USAGE STAGING und USAGE DYNAMIC verwenden das _ lineare Layout.

D3D11.3 (und D3D12) führen ein standardmäßiges mehrdimensionales Datenlayout ein. Dadurch können mehrere Verarbeitungseinheiten mit denselben Daten arbeiten, ohne die Daten zu kopieren oder zwischen mehreren Layouts zu wischen. Ein standardisiertes Layout ermöglicht Effizienzsteigerungen durch Netzwerkeffekte und ermöglicht es Algorithmen, kurze Schnitte unter Der Annahme eines bestimmten Musters vorzunehmen.

Beachten Sie jedoch, dass diese Standardmäßig-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. Daher müssen Sie D3D11 _ FEATURE _ DATA _ D3D11 _ OPTIONS2abfragen. Standard-Swizzle muss auch mit einem Aufruf von ID3D11Device::CheckFeatureSupport abgefragt und das StandardSwizzle64KBSupported Feld von D3D11 _ FEATURE DATA _ _ D3D11 _ OPTIONS2 überprüft werden.

Die folgenden APIs verweisen auf die Texturzuordnung:

Enumerationen

Strukturen

Methoden

Direct3D 11.3-Features