共用方式為


D3D12_HEAP_TYPE列舉 (d3d12.h)

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

語法

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-write-once、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

另請參閱

核心列舉

描述元堆積