基於Pixel Shader的FFT已經完成

weixin_34054866發表於2012-04-22

上週末把GPU Gems 2裡的GPU FFT在KlayGE裡實現了一下,經過優化和調整,昨晚已經進入KlayGE的開發版本中。完整的FFT Lens Effects也會很快整合進去。

這裡用到的是那篇文章中提到的方法1,因為經過測試,方法2在現代GPU上速度不如方法1。我做的改進是把原來的3張查詢表合併成1張,並都用 16F而不是32F的格式儲存輸入輸出資料。在GTX580上,512×512的資料量,PS版本的FFT花費0.94ms左右,能達到CPU FFTW的75倍速度。但即便如此,對於lens effect那樣的應用來說還是有點慢。所以接下去考慮用Compute Shader來實現FFT,pass數會減少到1/3。PS每次處理2個數,512×512需要log(512) + log(512) = 18個pass;CS每次可以處理8個數,所以只要6個pass。在Ocean的例子裡有個CS4的FFT,需要多兩個texture和buffer互轉 的pass。CS5的FFT將會更乾淨,效率更高。

相關文章