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 方法

ID3D12Device1 方法

ID3D12Device2 方法

ID3D12Device3 方法

ID3D12Device4 方法

ID3D12Device5 方法

ID3D12CommandQueue 方法

ID3D12CommandList 方法

ID3D12GraphicsCommandList 方法

ID3D12GraphicsCommandList1 方法

ID3D12GraphicsCommandList2 方法

ID3D12GraphicsCommandList4 方法