Direct3D 12 Core 1.0 功能層級

Core 1.0 功能層級是完整 Direct3D 12 功能集的子集。 核心 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 中不支援具類型的緩衝區。

描述元中指定的 Stride 必須符合 HLSL 中指定的步幅。

核心裝置的命令佇列支援

僅計算和複製佇列(無 3D、視訊等佇列)。

核心裝置的著色器支援

僅限計算著色器、沒有圖形著色器(頂點、圖元著色器等)也沒有任何相關功能,例如轉譯目標、交換鏈結、輸入組合器。

算術精確度

核心裝置不需要支援 16 位浮點運算的反數。

核心裝置支援的 API

下列清單代表完整應用程式開發介面的支援子集(未 列出 Core 1.0 功能層級 中不支援 的 API )。

ID3D12Device 方法

ID3D12Device1 方法

ID3D12Device2 方法

ID3D12Device3 方法

ID3D12Device4 方法

ID3D12Device5 方法

ID3D12CommandQueue 方法

ID3D12CommandList 方法

ID3D12GraphicsCommandList 方法

ID3D12GraphicsCommandList1 方法

ID3D12GraphicsCommandList2 方法

ID3D12GraphicsCommandList4 方法