2014-01-22 33 views
0

我將計算着色器支持添加到我的代碼庫,並有問題尋找解決一些非常基本的問題:計算着色器基礎知識在DX11

  1. 在那裏所有的文件說,計算着色器流水線從獨立運行GPU,但是所有的dx11示例代碼都使用設備上下文接口來設置着色器本身,資源視圖和調用dispatch()方法,所以這些使用其他渲染命令排隊在命令緩衝區中,還是會被執行獨立?

  2. 繼續問題1,我可以從多個線程中調用計算着色器,還是需要緩衝所有計算着色器命令並將它們發佈到創建直接設備上下文的線程上?

  3. 同步。大多數文章使用CopyResource命令,該命令將自動同步計算着色器完成併爲CPU提供對結果的訪問,但似乎也會阻止GPU。有更有效的同步方法嗎?

我知道我可以通過試驗找到答案,但任何幫助節省我的時間,將不勝感激。

回答

2
  1. 計算着色器流水線從渲染管線獨立運行,即頂點着色器,像素着色器,混合狀態等對當你調用Dispatch()發生什麼事情沒有影響。但是,它們確實進入同一隊列,因此保留了對DrawDispatch的調用之間的排序。

  2. 對直接上下文的所有調用都必須從單個線程完成。

  3. 一種常見的方法是使用兩個緩衝區。當一個正在使用計算着色器進行操作時,另一個正在被CPU複製並讀取。大多數GPU將能夠並行化這個。

+0

我明白了,當我調用Present()時會發生什麼?計算着色器管道的行爲與渲染管道的行爲是否相同?含義 – Rincer

+0

我明白了,如果我有一個計算着色器排隊,並且我調用Present(),會發生什麼?它會在計算着色器完成執行之前停頓嗎?基本上可以運行跨越多重渲染幀的計算着色器嗎? – Rincer