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
- ID3D12Device::CheckFeatureSupport
- ID3D12Device::CopyDescriptors
- ID3D12Device::CopyDescriptorsSimple
- ID3D12Device::CreateCommandAllocator
- ID3D12Device::CreateCommandList
- ID3D12Device::CreateCommandQueue
- ID3D12Device::CreateCommandSignature
- ID3D12Device::CreateCommittedResource
- ID3D12Device::CreateComputePipelineState
- ID3D12Device::CreateConstantBufferView
- ID3D12Device::CreateDescriptorHeap
- ID3D12Device::CreateFence
- ID3D12Device::CreateHeap
- ID3D12Device::CreatePlacedResource
- ID3D12Device::CreateQueryHeap
- ID3D12Device::CreateRootSignature
- ID3D12Device::CreateShaderResourceView
- ID3D12Device::CreateSharedHandle
- ID3D12Device::CreateUnorderedAccessView
- ID3D12Device::Evict
- ID3D12Device::GetAdapterLuid
- ID3D12Device::GetCopyableFootprints
- ID3D12Device::GetCustomHeapProperties
- ID3D12Device::GetDescriptorHandleIncrementSize
- ID3D12Device::GetDeviceRemovedReason
- ID3D12Device::GetNodeCount
- ID3D12Device::GetResourceAllocationInfo
- ID3D12Device::MakeResident
- ID3D12Device::OpenSharedHandle
- ID3D12Device::OpenSharedHandleByName
- ID3D12Device::SetStablePowerState
ID3D12Device1-Methoden
- ID3D12Device1::CreatePipelineLibrary
- ID3D12Device1::SetEventOnMultipleFenceCompletion
- ID3D12Device1::SetResidencySetEventOnMultipleFenceCompletionPriority
ID3D12Device2-Methoden
ID3D12Device3-Methoden
- ID3D12Device3::OpenExistingHeapFromAddress
- ID3D12Device3::OpenExistingHeapFromFileMapping
- ID3D12Device3::EnqueueMakeResident
ID3D12Device4-Methoden
ID3D12Device5-Methoden
- ID3D12Device5::CreateMetaCommand
- ID3D12Device5::CreateStateObject
- ID3D12Device5::EnumerateMetaCommandParameters
- ID3D12Device5::EnumerateMetaCommands
- ID3D12Device5::RemoveDevice
ID3D12CommandQueue-Methoden
- ID3D12CommandQueue::BeginEvent
- ID3D12CommandQueue::EndEvent
- ID3D12CommandQueue::ExecuteCommandLists
- ID3D12CommandQueue::GetClockCalibration
- ID3D12CommandQueue::GetDesc
- ID3D12CommandQueue::GetTimestampFrequency
- ID3D12CommandQueue::SetMarker
- ID3D12CommandQueue::Signal
- ID3D12CommandQueue::Wait
ID3D12CommandList-Methoden
ID3D12GraphicsCommandList-Methoden
- ID3D12GraphicsCommandList::BeginEvent
- ID3D12GraphicsCommandList::BeginQuery
- ID3D12GraphicsCommandList::ClearState
- ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat
- ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint
- ID3D12GraphicsCommandList::Close
- ID3D12GraphicsCommandList::CopyBufferRegion
- ID3D12GraphicsCommandList::CopyResource
- ID3D12GraphicsCommandList::CopyTextureRegion
- ID3D12GraphicsCommandList::Dispatch
- ID3D12GraphicsCommandList::EndEvent
- ID3D12GraphicsCommandList::EndQuery
- ID3D12GraphicsCommandList::Reset
- ID3D12GraphicsCommandList::ResolveQueryData
- ID3D12GraphicsCommandList::ResourceBarrier
- ID3D12GraphicsCommandList::SetComputeRoot32BitConstant
- ID3D12GraphicsCommandList::SetComputeRoot32BitConstants
- ID3D12GraphicsCommandList::SetComputeRootConstantBufferView
- ID3D12GraphicsCommandList::SetComputeRootDescriptorTable
- ID3D12GraphicsCommandList::SetComputeRootShaderResourceView
- ID3D12GraphicsCommandList::SetComputeRootSignature
- ID3D12GraphicsCommandList::SetComputeRootUnorderedAccessView
- ID3D12GraphicsCommandList::SetDescriptorHeaps
- ID3D12GraphicsCommandList::SetMarker
- ID3D12GraphicsCommandList::SetPipelineState
- ID3D12GraphicsCommandList::SetPredication