D3D12_HEAP_FLAGS列舉 (d3d12.h)

指定堆積選項,例如堆積是否可以包含紋理,以及資源是否在配接器之間共用。

語法

typedef enum D3D12_HEAP_FLAGS {
  D3D12_HEAP_FLAG_NONE = 0,
  D3D12_HEAP_FLAG_SHARED = 0x1,
  D3D12_HEAP_FLAG_DENY_BUFFERS = 0x4,
  D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x8,
  D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20,
  D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40,
  D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80,
  D3D12_HEAP_FLAG_HARDWARE_PROTECTED = 0x100,
  D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH = 0x200,
  D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS = 0x400,
  D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT = 0x800,
  D3D12_HEAP_FLAG_CREATE_NOT_ZEROED = 0x1000,
  D3D12_HEAP_FLAG_TOOLS_USE_MANUAL_WRITE_TRACKING,
  D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0,
  D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0,
  D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,
  D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84
} ;

常數

 
D3D12_HEAP_FLAG_NONE
值:0
未指定任何選項。
D3D12_HEAP_FLAG_SHARED
值:0x1
堆積會共用。 請參閱 共用堆積
D3D12_HEAP_FLAG_DENY_BUFFERS
值:0x4
不允許堆積包含緩衝區。
D3D12_HEAP_FLAG_ALLOW_DISPLAY
值:0x8
允許堆積包含交換鏈結介面。
D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER
值:0x20
允許堆積跨配接器共享資源。 請參閱 共用堆積。 受保護的會話無法與跨配接器共用的資源混合。
D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES
值:0x40
不允許堆積儲存轉譯目標 (RT) 和/或 Depth-Stencil (DS) 紋理。
D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES
值:0x80
除非存在D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET或D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL,否則不允許堆積包含具有D3D12_RESOURCE_DIMENSION_TEXTURE1D、D3D12_RESOURCE_DIMENSION_TEXTURE2D或D3D12_RESOURCE_DIMENSION_TEXTURE3D的資源。 請參閱 D3D12_RESOURCE_DIMENSIOND3D12_RESOURCE_FLAGS
D3D12_HEAP_FLAG_HARDWARE_PROTECTED
值:0x100
支援。 請勿使用。
D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
值:0x200
堆積支援MEM_WRITE_WATCH功能,這會導致系統追蹤已認可記憶體區域中寫入的頁面。 此旗標無法與D3D12_HEAP_TYPE_DEFAULT或D3D12_CPU_PAGE_PROPERTY_UNKNOWN旗標結合。 不建議應用程式自行使用此旗標,因為它會防止工具使用這項功能。
D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS
值:0x400
根據能夠查看記憶體的元件,確保不可部分完成作業在此堆積的記憶體上。

在上述任一情況下,使用此旗標建立堆積將會失敗。
- 堆積類型是 D3D12_HEAP_TYPE_DEFAULT,而且堆積可以在多個節點上顯示,但裝置 不支援 D3D12_CROSS_NODE_SHARING_TIER_3
- 堆積是 CPU 可見的,但堆積類型 不會D3D12_HEAP_TYPE_CUSTOM

請注意,具有此旗標的堆積在某些系統上可能是有限的資源。
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT
值:0x800
堆積是在非居民州建立,必須使用 ID3D12Device::MakeResidentID3D12Device3::EnqueueMakeResident來建立。

根據預設,堆積建立的最後一個步驟是讓堆積常駐,因此此旗標會略過此步驟,並允許應用程式決定何時這麼做。
D3D12_HEAP_FLAG_CREATE_NOT_ZEROED
值:0x1000
允許OS不要零建立堆積。 根據預設,建立時,認可的資源和堆積幾乎一律為零。 此旗標允許在某些案例中加以省略。 不過,它並不保證。 例如,來自其他進程的記憶體仍然需要為零,才能進行數據保護和進程隔離。 這可能會降低建立堆積的額外負荷。
D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES
值:0
允許堆積儲存所有類型的緩衝區和/或紋理。 這是別名;如需詳細資訊,請參閱一節中的。
D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS
值:0xc0
堆積只允許儲存緩衝區。 這是別名;如需詳細資訊,請參閱一節中的。
D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES
值:0x44
堆積只允許儲存非 RT、非 DS 紋理。 這是別名;如需詳細資訊,請參閱一節中的。
D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES
值:0x84
堆積只允許儲存 RT 和/或 DS 紋理。 這是別名;如需詳細資訊,請參閱一節中的。

言論

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

下列堆積旗標必須與 ID3D12Device::CreateHeap搭配使用,但會自動設定 ID3D12Device::CreateCommittedResource所建立的隱含堆積。 只支援 堆積第1層 的配接器必須設定下列三個旗標的兩個。
價值 描述
D3D12_HEAP_FLAG_DENY_BUFFERS 不允許堆積包含具有D3D12_RESOURCE_DIMENSION_BUFFER的資源(這是 D3D12_RESOURCE_DIMENSION 列舉常數)。
D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES 不允許堆積包含具有D3D12_RESOURCE_DIMENSION_TEXTURE1D、D3D12_RESOURCE_DIMENSION_TEXTURE2D或D3D12_RESOURCE_DIMENSION_TEXTURE3D與D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET或D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL的資源。 (后兩個專案是 D3D12_RESOURCE_FLAGS 列舉常數。
D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES 除非不存在D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET和D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL,否則不允許堆積包含具有D3D12_RESOURCE_DIMENSION_TEXTURE1D、D3D12_RESOURCE_DIMENSION_TEXTURE2D或D3D12_RESOURCE_DIMENSION_TEXTURE3D的資源。

別名

此外,支援 堆積第 2 層 或更新版本的配接器,也不允許設定上述旗標。 這些旗標的別名適用於只考慮支援哪些資源的應用程式。

下列別名存在,因此在執行位操作時請小心:

  • D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0,而且只支援 堆積第 2 層 和更新版本。
  • D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES |D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES
  • D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = D3D12_HEAP_FLAG_DENY_BUFFERS |D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES
  • D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = D3D12_HEAP_FLAG_DENY_BUFFERS |D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES

可顯示堆積

可顯示堆積最常由交換鏈建立以供簡報使用,以啟用對監視器的掃描。

可顯示的堆積是使用 D3D12_HEAP_FLAGS 列舉D3D12_HEAP_FLAG_ALLOW_DISPLAY成員來指定。

應用程式可能會在交換鏈外建立可顯示的堆積;但實際上無法與它們一起出現。 CreateHeap 不支援此旗標,且只能搭配 D3D12_HEAP_TYPE_DEFAULT CreateCommittedResource 使用。

D3D12_RESOURCE_DESC 的其他限制會套用至使用可顯示堆積建立的資源。

  • 格式不僅必須由裝置支援,而且必須支持掃描。請參閱使用 D3D12_FORMAT_SUPPORT1D3D12_FORMAT_SUPPORT1_DISPLAY 成員。
  • 維度 必須D3D12_RESOURCE_DIMENSION_TEXTURE2D。
  • 對齊 必須是 0。
  • ArraySize 可以是 1 或 2。
  • MipLevels 必須是 1。
  • SampleDesc 必須設定為 1 CountQuality 設為 0。
  • 版面配置 必須D3D12_TEXTURE_LAYOUT_UNKNOWN。
  • D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL和D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER是無效的旗標。

要求

要求 價值
標頭 d3d12.h

另請參閱

CD3DX12_HEAP_DESC

核心列舉

描述元堆積