D3D12_HEAP_TYPE列舉 (d3d12.h)

指定堆積的類型。 當駐留時,堆積會位於具有特定 CPU 快取屬性的特定實體記憶體集區中。

Syntax

typedef enum D3D12_HEAP_TYPE {
  D3D12_HEAP_TYPE_DEFAULT = 1,
  D3D12_HEAP_TYPE_UPLOAD = 2,
  D3D12_HEAP_TYPE_READBACK = 3,
  D3D12_HEAP_TYPE_CUSTOM = 4,
  D3D12_HEAP_TYPE_GPU_UPLOAD
} ;

常數

 
D3D12_HEAP_TYPE_DEFAULT
值: 1
指定預設堆積。 此堆積類型會體驗 GPU 的最大頻寬,但無法提供 CPU 存取。 GPU 可以從此集區讀取和寫入記憶體,而且可能會變更資源轉換屏障。 大部分的堆積和資源預期都位於此處,而且通常會透過上傳堆積中的資源填入。
D3D12_HEAP_TYPE_UPLOAD
值: 2
指定用於上傳的堆積。 此堆積類型具有優化以上傳至 GPU 的 CPU 存取,但不會體驗 GPU 的最大頻寬量。 此堆積類型最適合 CPU-write-once、GPU-read-once 數據;但 GPU-read-once 比必要更嚴格。 GPU-read-once-or-from-cache 是數據可接受的使用案例;但這類使用方式很難判斷,因為 GPU 快取設計和大小不同。 如果不確定,請繼續使用 GPU 讀取一次定義,或分析將數據複製到_DEFAULT堆積與從_UPLOAD堆積讀取數據之間的許多 GPU 差異。

此堆積中的資源必須以 D3D12_RESOURCE_STATE建立_GENERIC_READ且無法從此變更。 這類堆積的CPU位址通常不適用於CPU讀取。

以下是_UPLOAD堆積的一般用法:

  • 使用 CPU 中的數據初始化_DEFAULT堆積中的資源。

  • 在每個頂點或像素重複讀取的常數緩衝區中上傳動態數據。



以下是_UPLOAD堆積的不錯用法:

  • 重新初始化每個畫面格的資源內容。

  • 上傳只會使用其他 Draw 呼叫的常數數據,其中每個 Draw 會使用非簡單的其他數據量。

D3D12_HEAP_TYPE_READBACK
值: 3
指定用於回讀的堆積。 此堆積類型具有已針對從 GPU 讀取數據優化的 CPU 存取,但不會體驗 GPU 的最大頻寬量。 此堆積類型最適合 GPU 寫入一次、CPU 可讀取的數據。 CPU 快取行為是回寫,這是多個子快取行 CPU 讀取的不便。

此堆積中的資源必須以 D3D12_RESOURCE_STATE_COPY_DEST建立,而且無法從此變更。
D3D12_HEAP_TYPE_CUSTOM
值: 4
指定自訂堆積。 應用程式可以直接指定記憶體集區和CPU快取屬性,這對於UMA優化、多引擎、多適配卡或其他特殊案例很有用。 若要這樣做,應用程式應瞭解適配卡架構,以做出正確的選擇。 如需詳細資訊,請參閱

D3D12_FEATURE_ARCHITECTURE、
D3D12_FEATURE_DATA_ARCHITECTURE
GetCustomHeapProperties

備註

下列 API 專案會使用此列舉:

堆積類型分為兩個類別:抽象堆積類型,以及自定義堆積類型。

以下是抽象堆積類型:

  • D3D12_HEAP_TYPE_DEFAULT
  • D3D12_HEAP_TYPE_UPLOAD
  • D3D12_HEAP_TYPE_READBACK
以下是自訂堆積類型:
  • D3D12_HEAP_TYPE_CUSTOM
抽象堆積類型 (_DEFAULT、_UPLOAD和_READBACK) 对于简化写入配接器中性应用程序很有用,因為這類應用程式不需要注意配接器記憶體架構。 若要使用抽象堆積類型來簡化寫入適配卡中性應用程式,應用程式基本上會將配接器視為離散或 NUMA 配接器。 但是,使用堆積類型可有效轉譯UMA配接器。 配接器架構中性應用程式應該假設有兩個可用的記憶體集區,其中具有最多 GPU 頻寬的集區無法提供 CPU 存取。 具有最低 GPU 頻寬的集區可以具有 CPU 存取權;但必須針對上傳至 GPU 或從 GPU 回寫進行優化。

請注意,與緩衝區不同的紋理 () 不能是堆積類型UPLOAD或READBACK。

規格需求

需求
標頭 d3d12.h

另請參閱

核心列舉

描述項堆積