2016-09-21 100 views
0

我有一個比較複雜的着色器,我想編譯它。 着色器有700行,編譯成〜3000條指令。HLSL編譯速度

編譯時間與fxc(Windows 8 SDK)約90秒。 我有另一個類似大小的着色器,編譯時間爲20秒。

因此,這裏是我的問題:

  • 可以加快從應用的角度(FXC或FXC替代的速度更快的版本)的編制?
  • 是否有可能加快從代碼視點編譯(是代碼構造大大減慢編譯 - 哪些,如何避免它們)?
  • 是否有可能加快編譯fxc設置的觀點(一些祕密選項 - 快速編譯或其他)?

編輯:在MSDN論壇

並行線程:

https://social.msdn.microsoft.com/Forums/en-US/5e60c68e-8902-48d6-b497-e86ac4f2cfe7/hlsl-compilation-speed?forum=vclanguage

回答

0

爲什麼着色器編譯時間的問題? Fxc是一個離線編譯器,這意味着生成的字節碼是獨立於硬件的,可以與應用程序一起分發。

如果您希望在開發過程中縮短迭代時間,可以使用「/ Od」命令行選項禁用最優化。

+0

問題當然是發展。編譯可以通過incredibuild相對快速完成,但有兩個關鍵部分 - 鏈接和編譯着色器。由於着色器是從共享的C++頭文件中清除的,因此每次代碼更新都會導致新的編譯。這是令人討厭的... – user4663214

1

沒有「更快」的fxc或d3dcompile庫。

你可以通過不同的東西來加快速度,關閉優化就是其中之一,因爲驅動程序會優化從dxbc到最終的微碼。

但是,最好的建議是實現着色器緩存,例如,如果您預處理並散列着色器文件並僅在實際上不同時觸發編譯,則會節省時間。

d3dcompile庫是多線程安全的,並且您想要利用多核CPU。如果編譯多個着色器,那麼實現包含接口來緩存文件加載也是很有價值的。最後,當一切都失敗時,你別無選擇,只能進行實驗,找到需要這麼長時間的東西,並且做一些重寫,有時候,對於罪魁禍首可能足以解決編譯時間。

+0

'[fastopt]'在我的經驗中比其他國旗更好地工作,以提高構建時間。 –