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

ID3D12Device1 方法

ID3D12Device2 方法

ID3D12Device3 方法

ID3D12Device4 方法

ID3D12Device5 方法

ID3D12CommandQueue 方法

ID3D12CommandList 方法

ID3D12GraphicsCommandList 方法

ID3D12GraphicsCommandList1 方法

ID3D12GraphicsCommandList2 方法

ID3D12GraphicsCommandList4 方法