共用方式為


設定和填充描述器堆

可以在命令清單上設定的描述項堆積類型,就是包含描述項數據表可以使用的描述項(一次最多一個)。

設定描述符堆

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

D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER

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

在命令清單中設定描述項堆積之後,定義描述項數據表的後續呼叫會參考目前的描述元堆積。 在命令清單的開頭以及當描述堆積在命令清單上被變更後,描述表的狀態未定義。 重複地設定相同的描述元堆積,並不會導致未定義描述項數據表設定。

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

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

填入描述堆疊

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

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

如果應用程式將描述項堆積設定為對 CPU 可見,則 CPU 可以呼叫方法,在堆積中建立描述符,並以自由線程的方式在不同位置之間複製(包括跨堆積)。 如果堆積已設定為SHADER_VISIBLE,則不允許CPU讀取。

描述符堆