我有一個程序首先渲染紋理,然後將紋理傳遞給計算着色器進行處理,然後通過紋理全屏四邊形將輸出結果渲染到屏幕上。GPU上下文切換
我讀過nVidia的計算着色器編程指南,每次調度計算着色器時,它都會啓動一個GPU設備上下文切換,這種切換不應該經常進行。
我現在很困惑。我看到它的方式,在我的渲染管線中,GPU切換兩次上下文。對?在第一次發送呼叫期間,下一次正常顯示我的全屏四倍頻時。
如果這是正確的,那麼我可以通過重組我的代碼來避免一個開關。首先,渲染一個紋理。其次,在計算着色器上進行處理。然後,在下一幀,渲染結果,然後(仍然在下一幀)渲染紋理的所有更新,在計算着色器上進行處理...因此,基本上每一幀的起始都會渲染最後一幀的結果(第一幀將是一個例外)。那麼只會有一個上下文切換,對吧?
但是,GPU仍然需要在幀之間進行上下文切換,對吧?所以我的渲染管道的兩個版本都有兩個上下文切換。性能沒有差別。我對麼?
任何幫助,將不勝感激。
謝謝。這清除了我對錶現的擔憂。然而,我的代碼的兩個版本呢,它們是一樣的嗎? – l3utterfly
性能方面他們幾乎是一樣的,你仍然需要切換,它會讓你的管道更加複雜以獲得最小的收益imo(還記得設備上下文調用是非阻塞的,所以你的命令很可能是當你調用當前的方法時執行,而不是當你調用dispatch或draw時) – catflier