D3D12_HEAP_FLAGS列舉 (d3d12.h)

指定堆積選項,例如堆積是否可以包含紋理,以及資源是否跨適配卡共用。

Syntax

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 層 的配接器必須設定下列三個旗標的兩個。
Description
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 不支援此旗標,而且只能搭配 CreateCommittedResource 搭配D3D12_HEAP_TYPE_DEFAULT使用。

D3D12_RESOURCE_DESC的其他限制適用於使用可顯示堆積建立的資源。

  • 格式不只能由裝置支援,也必須支持掃描。請參閱 D3D12_FORMAT_SUPPORT1 D3D12_FORMAT_SUPPORT1_DISPLAY成員的使用。
  • 維度 必須D3D12_RESOURCE_DIMENSION_TEXTURE2D。
  • 對齊 必須為 0。
  • ArraySize 可以是 1 或 2。
  • MipLevels 必須是 1。
  • SampleDescCount 必須設定為 1, 且 [品質 ] 設定為 0。
  • 版面配置 必須D3D12_TEXTURE_LAYOUT_UNKNOWN。
  • D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL和D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER是無效的旗標。

規格需求

需求
標頭 d3d12.h

另請參閱

CD3DX12_HEAP_DESC

核心列舉

描述項堆積