預測
述詞是一項功能,可讓 GPU 而非 CPU 判斷不繪製、複製或分派物件。
概觀
述詞的一般用法是遮蔽;如果繪製周框方塊且遮蔽,則繪製物件本身顯然沒有點。 在此情況下,對象的繪圖可以「述詞」,使其從 GPU 的實際轉譯中移除。
起初,這看起來可能會重複超過標準深度測試,加上早期深度通過。 但述詞可以移除繪製命令狀態本身的額外負荷,加上點陣化。 雖然早期深度傳遞會移除不必要的圖元,但它仍然可以執行頂點、殼層、定義域和幾何著色器,並叫用固定函式輸入組合器、鑲嵌器和點陣化器。 藉由繪製簡單的周框方塊或類似的周框磁碟區,比實際模型更容易處理和點陣化,即可避免不必要的點陣化和處理。
不同於 Direct3D 11,預先分割與查詢分離,而且會在 Direct3D 12 中展開,讓應用程式根據應用程式開發人員可能決定的任何原因來述詞物件(不只是遮蔽)。
SetPredication
您可以根據緩衝區內 64 位的值來設定述詞(請參閱D3D12_PREDICATION_OP)。
當 GPU 執行 SetPredication 命令時,它會擷取緩衝區中的值。 緩衝區中數據的未來變更不會追溯影響述詞狀態。
如果輸入參數 Buffer 為 NULL,則會停用述詞。
Direct3D 12 API 中沒有述詞提示;直接、計算和複製命令清單允許和述詞。 來源緩衝區可以位於任何堆積類型中(預設、上傳、讀取、自定義)。
核心執行時間會驗證下列專案:
- AlignedBufferOffset 是 8 個字節的倍數
- 資源是緩衝區
- 作業是列舉的有效成員
- 無法從套件組合內呼叫 SetPredication
- 命令清單類型支援述詞
- 位移不會超過緩衝區大小
如果來源緩衝區不在D3D12_RESOURCE_STATE_PREDICATION中,偵錯層會發出錯誤(這與D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT相同,而且只是別名)狀態。
可述詞的作業集合如下:
- DrawInstanced
- DrawIndexedInstanced
- 遣
- CopyTextureRegion
- CopyBufferRegion
- CopyResource
- CopyTiles
- ResolveSubresource
- ClearDepthStencilView
- ClearRenderTargetView
- ClearUnorderedAccessViewUint
- ClearUnorderedAccessViewFloat
- ExecuteIndirect
ExecuteBundle 本身不是述詞。 相反地,上述清單中的個別作業會述詞包含在套件組合的一邊。
不會述詞 ID3D12GraphicsCommandList 方法 ResolveQueryData、BeginQuery 和 EndQuery。
相關主題