Direct3D 12 Core 1.0 功能级别
核心 1.0 功能级别是完整 Direct3D 12 功能集的子集。 核心 1.0 功能级别可由一类设备(称为纯计算设备)公开。 纯计算设备的总体驱动程序模型是 Microsoft 计算驱动程序模型 (MCDM)。 MCDM 是 Windows 设备驱动程序模型 (WDDM) 的缩小对等体,后者的范围更大。
仅支持核心功能级别内功能的设备称为核心设备。
注意
纯计算设备、MCDM 设备、核心功能级设备和核心设备都表示相同的意思。 为简单起见,我们倾向于使用核心设备。
创建核心设备
一般来说,要创建 Direct3D 12 设备,需要调用 D3D12CreateDevice 函数,并指定最低功能级别。
如果指定的功能级别为 9 到 12,那么返回的设备就是功能丰富的设备,如传统 GPU(支持核心设备的超集功能)。 对于该范围的功能级别,从未返回过核心设备。
另一方面,如果指定了核心功能级别(例如,D3D_FEATURE_LEVEL::D3D_FEATURE_LEVEL_1_0_CORE),那么返回的设备可能是功能丰富的设备,也可能是核心设备。
// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000
如果指定 _CORE
功能级别,运行时/调试层将验证应用程序使用的功能是否为 _CORE
功能级别所允许。 本主题稍后将对这组功能进行定义。
核心设备的着色器模型
核心设备支持着色器模型 5.0+。
运行时会将 5.x 非 DXIL 着色器模型转换为 6.0 DXIL。 因此,驱动程序只需支持 6.x。
核心设备的资源管理模型
- 支持的资源维度:仅限原始和结构化缓冲区(不支持类型化缓冲区、texture1d/2D 等)
- 不支持保留(平铺)资源
- 不支持自定义堆
- 不支持任何这些堆标志:
- D3D12_HEAP_FLAG_HARDWARE_PROTECTED
- D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
- D3D12_HEAP_FLAG_ALLOW_DISPLAY
- D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS(注意着色器原子是必需的,该标志用于另一项功能,即跨适配器原子)
核心设备的资源绑定模型
- 仅支持资源绑定第 1 层
- 例外:
- 不支持纹理采样器
- 支持 64 个 UAV,如功能等级 11.1+(而不是只有 8 个)
- 在着色器通过描述符访问资源时,不必对其实施边界检查,因为越界访问会产生未定义的行为。
- 作为副产品,不支持根签名中的描述符范围标志 D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS。
- UAV/CBV 描述符只能在默认堆中的资源上创建(因此没有上传/读回堆)。 这将强迫应用程序在 CPU<->GPU 之间复制数据。
- 尽管这是绑定能力最低的层级,但即使在这一层级中,仍有一些必要的功能值得一提:
- 描述符堆可在记录命令列表后更新(请参阅资源绑定规范中的 D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE)
- 根描述符基本上是 GPUVA 指针
- 即使不支持 MMU / VA,也可以通过地址修补来模拟根描述符中使用的缓冲区 VA。
结构化缓冲区限制
结构化缓冲区的基址必须是 4 字节对齐,步幅必须是 2 或 4 的倍数。 步幅为 2 的情况适用于具有 16 位数据的应用,特别是考虑到 D3D_FEATURE_LEVEL_1_0_CORE 中不支持类型缓冲区。
描述符中指定的步幅必须与 HLSL 中指定的步幅一致。
为核心设备提供命令队列支持
仅计算和复制队列(无 3D 和视频等队列)。
为核心设备提供着色器支持
只有计算着色器,没有图形着色器(顶点、像素着色器等),也没有任何相关功能,如呈现目标、交换链和输入汇编程序。
算术精度
核心设备不必支持 16 位浮点运算的非规格化数。
核心设备支持的 API
下面的列表代表完整应用程序接口的受支持子集(核心 1.0 功能级别 不支持的 API 未列出)。
ID3D12Device 方法
- 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 方法
- ID3D12Device1::CreatePipelineLibrary
- ID3D12Device1::SetEventOnMultipleFenceCompletion
- ID3D12Device1::SetResidencySetEventOnMultipleFenceCompletionPriority
ID3D12Device2 方法
ID3D12Device3 方法
- ID3D12Device3::OpenExistingHeapFromAddress
- ID3D12Device3::OpenExistingHeapFromFileMapping
- ID3D12Device3::EnqueueMakeResident
ID3D12Device4 方法
ID3D12Device5 方法
- ID3D12Device5::CreateMetaCommand
- ID3D12Device5::CreateStateObject
- ID3D12Device5::EnumerateMetaCommandParameters
- ID3D12Device5::EnumerateMetaCommands
- ID3D12Device5::RemoveDevice
ID3D12CommandQueue 方法
- ID3D12CommandQueue::BeginEvent
- ID3D12CommandQueue::EndEvent
- ID3D12CommandQueue::ExecuteCommandLists
- ID3D12CommandQueue::GetClockCalibration
- ID3D12CommandQueue::GetDesc
- ID3D12CommandQueue::GetTimestampFrequency
- ID3D12CommandQueue::SetMarker
- ID3D12CommandQueue::Signal
- ID3D12CommandQueue::Wait
ID3D12CommandList 方法
ID3D12GraphicsCommandList 方法
- 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