Direct3D 12 Core 1.0-Featureebene

Die Featureebene "Core 1.0" ist eine Teilmenge des vollständigen Direct3D 12-Featuresatzes. Core 1.0 Feature Level kann von einer Kategorie von Geräten verfügbar gemacht werden, die als Nur-Compute-Geräte bezeichnet werden. Das gesamte Treibermodell für Compute-only-Geräte ist das Microsoft Compute Driver Model (MCDM). MCDM ist ein skalierter Peer des Windows Gerätetreibermodells (WDDM), der einen größeren Umfang aufweist.

Ein Gerät, das nur die Features in 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 dieselbe Sache. Wir bevorzugen Core-Gerät für Einfachheit.

Erstellen eines Core-Geräts

Im Allgemeinen rufen Sie zum Erstellen eines Direct3D 12-Geräts die D3D12CreateDevice-Funktion auf, und geben Sie eine Mindestfeatureebene 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 nie für diesen Bereich von Featureebenen zurückgegeben.

Wenn Sie jedoch eine Core-Featureebene angeben (z. B. D3D_FEATURE_LEVEL::D 3D_FEATURE_LEVEL_1_0_CORE), kann das zurückgegebene Gerät featurereich sein 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, dass die features, die Ihre Anwendung verwendet, von dieser _CORE Featureebene zulässig sind. Dieser Satz von Features wird später in diesem Thema definiert.

Shadermodell für Core-Geräte

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

Die Laufzeit führt die Konvertierung von 5.x non DXIL-Shadermodellen in 6.0 DXIL aus. Damit der Treiber nur 6.x unterstützt.

Ressourcenverwaltungsmodell für Core-Geräte

  • Unterstützte Ressourcendimensionen: nur rohe und strukturierte Puffer (keine typierten Puffer, Texture1d/2D usw.)
  • Keine Unterstützung für reservierte (gekachelte) Ressourcen
  • Keine Unterstützung für benutzerdefinierte Heaps
  • Keine Unterstützung für eine 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, Kreuzadapter-Atome)

Ressourcenbindungsmodell für Core-Geräte

  • Unterstützung nur für Ressourcenbindungsstufe 1
  • Ausnahmen:
    • Keine Unterstützung für Texturbeispieler
    • Unterstützung für 64 UAVs wie Featureebene 11.1+ (im Gegensatz zu nur 8)
    • Implementierungen müssen keine Grenzen implementieren, die die Überprüfung von Shaderzugriffen auf Ressourcen durch Deskriptoren durchführen müssen, aus Grenzen, die nicht definiertes Verhalten erzeugen.
      • Als Nachprodukt wird das Deskriptorbereichskennzeichen D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS in Stammsignaturen nicht unterstützt.
  • UAV/CBV-Deskriptoren können nur auf Ressourcen aus Standard-Heaps vorgenommen werden (daher keine Upload-/Readback-Heaps). Dadurch wird Ihre Anwendung gezwungen, Kopien zu erledigen, um Daten über CPU-GPU<> zu erhalten.
  • Trotz der niedrigsten Bindungsfunktionsstufe gibt es noch einige Features, die auch in dieser Ebene erforderlich sind, die aufgerufen werden:
    • Descriptor-Heaps können aktualisiert werden, nachdem Befehlslisten aufgezeichnet werden (siehe D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE in der Ressourcenbindungsspezifikation)
    • Stammdeskriptoren sind grundsätzlich GPUVA-Zeiger
      • Obwohl es keine MMU/VA-Unterstützung gibt, können Puffer-VAs, die in Stammdeskriptoren verwendet werden, durch Implementierungen emuliert werden, indem Sie Das Patching ausführen.

Strukturierte Puffereinschränkungen

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 wenn es keine Unterstützung für typierte Puffer in D3D_FEATURE_LEVEL_1_0_CORE gibt.

Stride, die in Deskriptoren angegeben sind, müssen mit dem in HLSL angegebenen Stride übereinstimmen.

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

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

Shaderunterstützung für Core-Geräte

Compute-Shader nur, keine Grafik-Shader (Vertex, Pixel Shaders usw.) oder verwandte Funktionen wie Renderziele, Swapchains, Eingabeasseppierer.

Arithmetische Genauigkeit

Kerngeräte müssen keine Normalwerte für 16-Bit-Gleitkommavorgänge unterstützen.

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

Die nachstehende Liste stellt die unterstützte Teilmenge der vollständigen Anwendungsprogrammierungsschnittstelle dar (APIs, die nicht in Core 1.0 Featureebene unterstützt werden, werden nicht aufgelistet).

ID3D12Device-Methoden

ID3D12Device1-Methoden

ID3D12Device2-Methoden

ID3D12Device3-Methoden

ID3D12Device4-Methoden

ID3D12Device5-Methoden

ID3D12CommandQueue-Methoden

ID3D12CommandList-Methoden

ID3D12GraphicsCommandList-Methoden

ID3D12GraphicsCommandList1-Methoden

ID3D12GraphicsCommandList2-Methoden

ID3D12GraphicsCommandList4-Methoden