Share via


設定和填入描述元堆積

可以在命令清單上設定的描述元堆積類型,是包含描述中繼資料表的描述元,一次 (最多可以使用一個描述中繼資料表) 。

設定描述項堆積

可以在命令清單上設定的描述元堆積類型如下:

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER

在命令清單上設定的堆積也必須建立為著色器可見。 命令清單有三種類型:DIRECT、BUNDLE 和 COMPUTE。

在命令清單中設定描述元堆積之後,定義描述中繼資料表的後續呼叫會參考目前的描述元堆積。 描述中繼資料表狀態在命令清單的開頭未定義,並在命令清單上變更描述元堆積之後。 重複設定相同的描述元堆積並不會造成描述項資料表設定未定義。

相反地,在套件組合中,描述元堆積只能設定一次, (備援呼叫設定相同的堆積兩次不會產生錯誤) ;否則,行為為未定義。 設定的描述項堆積必須符合任何命令清單呼叫套件組合時的狀態;否則,行為為未定義。 這可讓套件組合繼承和編輯命令清單的描述項資料表設定。 不會變更描述中繼資料表的套件組合 (只繼承它們) 完全不需要設定描述元堆積,而且只會繼承自呼叫命令清單。

使用 ID3D12GraphicsCommandList::SetDescriptorHeaps) (設定描述元堆積時,所有使用的堆積都會設定在單一呼叫 (,而且所有先前設定的堆積都會由呼叫) 取消設定。 在呼叫中,最多可以設定上述每個類型的一個堆積。

填入描述元堆積

應用程式建立描述元堆積之後,就可以在裝置上使用方法,直接在堆積中產生描述元,或將描述元從一個位置複製到另一個位置。

描述元堆積記憶體的初始內容未定義,因此要求 GPU 或驅動程式參考未初始化的記憶體以進行轉譯可能會導致未定義的結果,例如裝置重設。

如果應用程式將描述元堆積設定為可看見 CPU,則 CPU 可以呼叫方法,以將描述元建立至堆積,並從位置複製以放置 (,包括以立即、免費的執行緒方式跨堆積) 。 如果堆積已設定為SHADER_VISIBLE,則不允許由 CPU 讀取。

描述項堆積