2012-10-06 83 views
1

我有一個程序首先渲染紋理,然後將紋理傳遞給計算着色器進行處理,然後通過紋理全屏四邊形將輸出結果渲染到屏幕上。GPU上下文切換

我讀過nVidia的計算着色器編程指南,每次調度計算着色器時,它都會啓動一個GPU設備上下文切換,這種切換不應該經常進行。

我現在很困惑。我看到它的方式,在我的渲染管線中,GPU切換兩次上下文。對?在第一次發送呼叫期間,下一次正常顯示我的全屏四倍頻時。

如果這是正確的,那麼我可以通過重組我的代碼來避免一個開關。首先,渲染一個紋理。其次,在計算着色器上進行處理。然後,在下一幀,渲染結果,然後(仍然在下一幀)渲染紋理的所有更新,在計算着色器上進行處理...因此,基本上每一幀的起始都會渲染最後一幀的結果(第一幀將是一個例外)。那麼只會有一個上下文切換,對吧?

但是,GPU仍然需要在幀之間進行上下文切換,對吧?所以我的渲染管道的兩個版本都有兩個上下文切換。性能沒有差別。我對麼?

任何幫助,將不勝感激。

回答

1

上下文切換引入了一個小命中,但在你的情況下,它可以忽略不計,所以你可以安全地在同一幀中多次計算和渲染管線之間切換,而無需擔心。

在很多現代遊戲中,同一管道中有兩個以上的開關(渲染的圖形管道,光線的計算着色器,fxaa的pixelshader ...),它們仍然運行良好。

+0

謝謝。這清除了我對錶現的擔憂。然而,我的代碼的兩個版本呢,它們是一樣的嗎? – l3utterfly

+0

性能方面他們幾乎是一樣的,你仍然需要切換,它會讓你的管道更加複雜以獲得最小的收益imo(還記得設備上下文調用是非阻塞的,所以你的命令很可能是當你調用當前的方法時執行,而不是當你調用dispatch或draw時) – catflier