Direct3D 12 Core 1.0-Featureebene

Die Core 1.0-Featureebene ist eine Teilmenge des vollständigen Direct3D 12-Featuresatzes. Core 1.0 Featureebene kann von einer Kategorie von Geräten verfügbar gemacht werden, die als reine Computegeräte bezeichnet werden. Das Gesamttreibermodell für reine Computegeräte ist das Microsoft Compute Driver Model (MCDM). MCDM ist ein herunterskalierter Peer des Windows-Gerätetreibermodells (WDDM), das über einen größeren Bereich verfügt.

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

Hinweis

Compute-Only-Gerät, MCDM-Gerät, Core Feature Level-Gerät und Core-Gerät bedeuten alle dasselbe. Der Einfachheit halber bevorzugen wir das 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 Sie eine Mindestfunktionsebene an.

Wenn Sie eine Featureebene von 9 bis 12 angeben, ist das zurückgegebene Gerät ein featurereiches Gerät, z. B. eine herkömmliche GPU (die eine Übermenge der Funktionalität eines Core-Geräts unterstützt). Ein Core-Gerät wird für diesen Bereich von Featureebenen nie zurückgegeben.

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

// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000

Wenn Sie eine _CORE Featureebene angeben, überprüft die Laufzeit-/Debugebene, ob die von Ihrer Anwendung verwendeten Features von dieser _CORE Featureebene zulässig sind. Dieser Satz von Features wird weiter unten in diesem Thema definiert.

Shadermodell für Core-Geräte

Ein Core-Gerät unterstützt Shadermodell 5.0 und höher.

Die Runtime führt die Konvertierung von 5.x-Nicht-DXIL-Shadermodellen in 6.0 DXIL durch. Daher muss der Treiber nur 6.x unterstützen.

Ressourcenverwaltungsmodell für Core-Geräte

  • Unterstützte Ressourcendimensionen: Nur rohe und strukturierte Puffer (keine typisierten Puffer, texture1d/2D usw.)
  • Keine Unterstützung für reservierte (gekachelte) Ressourcen
  • Keine Unterstützung für benutzerdefinierte Heaps
  • Keine Unterstützung für eines dieser Heapflags:
    • D3D12_HEAP_FLAG_HARDWARE_PROTECTED
    • D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
    • D3D12_HEAP_FLAG_ALLOW_DISPLAY
    • D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS (Beachten Sie, dass Shader-Atome erforderlich sind, dieses Flag gilt für ein anderes Feature, adapterübergreifende Atome)

Ressourcenbindungsmodell für Core-Geräte

  • Nur Unterstützung für Ressourcenbindungsebene 1
  • Ausnahmen:
    • Keine Unterstützung für Textur-Sampler
    • Unterstützung für 64 UAVs wie Featureebene 11.1+ (im Gegensatz zu nur 8)
    • Implementierungen müssen keine Begrenzungsüberprüfung für Shaderzugriffe auf Ressourcen über Deskriptoren implementieren, out-of-bound-Zugriffe führen zu undefiniertem Verhalten.
      • Als Nebenprodukt wird das Deskriptorbereichsflag D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS in Stammsignaturen nicht unterstützt.
  • UAV/CBV-Deskriptoren können nur für Ressourcen aus Standardheaps vorgenommen werden (daher keine Upload-/Readback-Heaps). Dies zwingt Ihre Anwendung, Kopien zu erstellen, um Daten über cpu-GPU<> hinweg abzurufen.
  • Obwohl es sich um die niedrigste Bindungsfunktionsebene handelt, sind auch in dieser Ebene noch einige Features erforderlich, die folgendes beachtenswert sind:
    • Deskriptorheaps 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 es keine MMU/VA-Unterstützung gibt, können Puffer-VAs, die in Stammdeskriptoren verwendet werden, von Implementierungen emuliert werden, indem Sie Adresspatching durchführen.

Einschränkungen für strukturierte Puffer

Strukturierte Puffer müssen eine Basisadresse aufweisen, die 4 Byte ausgerichtet ist, und 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 wenn es keine Unterstützung für typisierte Puffer in D3D_FEATURE_LEVEL_1_0_CORE gibt.

Der in Deskriptoren angegebene Stride muss mit dem in HLSL angegebenen Stride übereinstimmen.

Unterstützung von Befehlswarteschlangen für Core-Geräte

Nur Compute- und Kopierwarteschlangen (keine 3D-, Video- usw. Warteschlangen).

Shaderunterstützung für Core-Geräte

Nur Compute-Shader, keine Grafik-Shader (Vertex, Pixel-Shader usw.) oder verwandte Funktionen wie Renderziele, Swapchains, Eingabeassemulator.

Arithmetische Genauigkeit

Kerngeräte müssen keine Denormierungen für 16-Bit-Gleitkommavorgänge 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 Featureebene 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