Direct3D 12 Core 1.0 功能级别
Core 1.0 功能级别是完整 Direct3D 12 功能集的子集。 Core 1.0 功能级别可由一类称为 “仅限计算设备”的设备公开。 仅限计算设备的总体驱动程序模型是 Microsoft 计算驱动程序模型 (MCDM) 。 MCDM 是 Windows 设备驱动程序模型 (WDDM) 的缩减对等方,其范围更大。
仅支持核心功能级别内功能的设备称为核心设备。
注意
仅限计算的设备、MCDM 设备、核心功能级别设备和核心设备都具有相同的含义。 为简单起见,我们将首选 核心设备 。
创建核心设备
通常,若要创建 Direct3D 12 设备,请调用 D3D12CreateDevice 函数并指定最低功能级别。
如果将功能级别指定为 9 到 12,则返回的设备是功能丰富的设备,例如支持核心设备) 功能超集的传统 GPU (。 对于该功能级别范围,核心设备永远不会返回。
另一方面,如果指定核心功能级别 (例如 D3D_FEATURE_LEVEL::D 3D_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
以下列表表示完整应用程序编程接口支持的子集, (Core 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::D ispatch
- 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
ID3D12GraphicsCommandList1 方法
ID3D12GraphicsCommandList2 方法
ID3D12GraphicsCommandList4 方法
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈