Freigeben über


Direct3D 12 Core 1.0-Feature-Ebene

Das Core 1.0 Feature-Ebene ist eine Teilmenge des vollständigen Direct3D 12 Feature-Sets. Core 1.0-Feature-Ebene kann von einer Kategorie von Geräten verfügbar gemacht werden, die als Nur Computergeräte bezeichnet werden. Das allgemeine Treibermodell für computerbasierte Geräte ist das Microsoft Compute Driver Model (MCDM). MCDM ist ein skalierter Peer des Windows Device Driver Model (WDDM), der einen größeren Bereich aufweist.

Ein Gerät, das nur die Features innerhalb einer Kernmerkmal-Ebene unterstützt, wird als Core-Gerät bezeichnet.

Hinweis

Compute only device, MCDM device, Core Feature Level device und Core-Gerät bedeuten alle dasselbe. Der Einfachheit halber bevorzugen wir Core-Gerät .

Erstellen eines Core-Geräts

Zum Erstellen eines Direct3D 12-Geräts rufen Sie im Allgemeinen die D3D12CreateDevice-Funktion auf und geben eine minimale Feature-Ebene an.

Wenn Sie eine Feature-Ebene von 9 bis 12 angeben, ist das zurückgegebene Gerät ein funktionsreiches Gerät, z. B. eine herkömmliche GPU (die eine Obermenge der Funktionalität eines Core-Geräts unterstützt). Für diesen Bereich von Feature-Ebenen wird nie ein Core-Gerät zurückgegeben.

Wenn Sie dagegen eine Core-Feature-Ebene angeben (z. B. D3D_FEATURE_LEVEL::D 3D_FEATURE_LEVEL_1_0_CORE), kann das zurückgegebene Gerät funktionsreich sein oder ein Core-Gerät sein.

// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000

Wenn Sie eine _CORE Feature-Ebene angeben, überprüft die Laufzeit-/Debug-Ebene, ob die von der Anwendung verwendeten Features von dieser _CORE Feature-Ebene zugelassen sind. Dieser Satz von Features wird weiter unten in diesem Thema definiert.

Shader-Modell für Core-Geräte

Ein Core-Gerät unterstützt Shader-Modell 5.0+.

Die Laufzeit führt die Konvertierung von 5.x-Nicht-DXIL-Shader-Modellen in 6.0 DXIL durch. Der Treiber muss also nur 6.x unterstützen.

Ressourcenverwaltungsmodell für Core-Geräte

  • Unterstützte Ressourcendimensionen: nur unformatierte und strukturierte Puffer (keine typisierten Puffer, Texture1d/2D usw.)
  • Keine Unterstützung für reservierte (nebeneinander angeordnete) Ressourcen
  • Keine Unterstützung für benutzerdefinierte Heaps
  • Keine Unterstützung für eines dieser Heap-Flags:
    • D3D12_HEAP_FLAG_HARDWARE_PROTECTED
    • D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
    • D3D12_HEAP_FLAG_ALLOW_DISPLAY
    • D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS (Hinweis-Shader-Atome sind erforderlich, diese Kennzeichnung ist für ein anderes Feature, Cross-Adapter-Atomik)

Ressourcenbindungsmodell für Core-Geräte

  • Unterstützung nur für Ressourcenbindungsebene 1
  • Ausnahmen:
    • Keine Unterstützung für Textursammler
    • Unterstützung für 64 UAVs wie Feature-Ebene 11.1+ (im Gegensatz zu nur 8)
    • Implementierungen müssen keine Begrenzungsüberprüfungen für Shader-Zugriffe über Deskriptoren implementieren, außerhalb von Grenzen führen zu einem nicht definierten Verhalten.
      • Als Nebenprodukt wird das Deskriptorbereichs-Flag D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS in Stammsignaturen nicht unterstützt.
  • UAV/CBV-Deskriptoren können nur für Ressourcen von Standard-Heaps (also keine Upload-/Readback-Heaps) vorgenommen werden. Dadurch wird Ihre Anwendung gezwungen, Kopien zu erledigen, um Daten über CPU<->GPU hinweg abzurufen.
  • Obwohl es sich um die niedrigste Bindungsfunktionsebene handelt, sind noch einige Features erforderlich, auch in dieser Stufe, die es Wert ist, herauszurufen:
    • Deskriptor-Heaps können aktualisiert werden, nachdem Befehlslisten aufgezeichnet wurden (siehe D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE in der Ressourcenbindungsspezifikation)
    • Stammdeskriptoren sind im Grunde GPUVA-Zeiger
      • Obwohl keine MMU/VA-Unterstützung vorhanden ist, können Puffer-VAs, die in Stammdeskriptoren verwendet werden, durch Implementierungen durch Adress-Patching emuliert werden.

Einschränkungen für strukturierte Puffer

Strukturierte Puffer müssen eine Basisadresse aufweisen, die 4 Byte ausgerichtet ist, und die Stride muss 2 oder ein Vielfaches von 4 sein. Der Fall für einen Schritt von 2 ist für Apps mit 16-Bit-Daten, insbesondere da es keine Unterstützung für typisierte Puffer in D3D_FEATURE_LEVEL_1_0_CORE gibt.

Die in Deskriptoren angegebene Stride muss mit der in HLSL angegebenen Stride übereinstimmen.

Unterstützung der Befehlswarteschlange für Core-Geräte

Berechnen und Kopieren von Warteschlangen (keine 3D-, Video- usw. Warteschlangen).

Shader-Unterstützung für Core-Geräte

Compute-Shader nur, keine Grafik-Shader (Vertex, Pixelshader usw.) oder verwandte Funktionen wie Render-Ziele, Swapchains, Eingabeassembler.

Arithmetische Genauigkeit

Core-Geräte müssen keine Denorms für 16-Bit-Gleitkommaoperationen unterstützen.

Unterstützte APIs für Core-Geräte

Die folgende Liste stellt die unterstützte Teilmenge der vollständigen Anwendungsprogrammierschnittstelle dar (APIs, die in Core 1.0-Feature-Ebene nicht unterstützt werden, werden nicht aufgeführt).

ID3D12Device-Methoden

ID3D12Device1-Methoden

ID3D12Device2-Methoden

ID3D12Device3-Methoden

ID3D12Device4-Methoden

ID3D12Device5-Methoden

ID3D12CommandQueue-Methoden

ID3D12CommandList-Methoden

ID3D12GraphicsCommandList-Methoden

ID3D12GraphicsCommandList1-Methoden

ID3D12GraphicsCommandList2-Methoden

ID3D12GraphicsCommandList4-Methoden