2013-05-04 48 views
3

在iOS上,我發現,大多數(所有?)器件具有8. GL_MAX_VARYING_VECTORS我也看到了(見注here),即使調酒操作算作依賴紋理讀取。總之,這些限制似乎意味着你不能擁有超過8個元素的卷積核(至少不是最高效的)。避免依賴紋理與「大」內核讀取

有沒有一種方法來評估超過八個元素的卷積核,而不會產生依賴紋理讀取?

編輯:如果這有什麼差別,我的內核是一個旋轉的正方形:

• 
    • • • 
• • • • • 
    • • • 
    • 

我現在的粘性是創建紋理的兩個版本 - 一個相對於其它的補償(1 1) - 並使用這種內核:

• 
• • • 
    • • • 
    • 

我不知道一倍,上行數據流是否將超過避免了依賴紋理讀取的利益。正如@TraxNet所暗示的,我可能只需要對它進行衡量。

回答

1

在一起,這些限制似乎意味着你不能有超過八個元素(至少,不是最高效的)的卷積核心。

我想你的意思是不依賴只讀八素。您可以通過在片段着色器(依賴)中生成新的紋理座標來更多次地查找紋理。

根據如何傳播你的查找,他們中的一些可以在紋理緩存可以減輕一些性能命中發現。另外,這並不意味着如果您使用uniform(「常量」)替換紋理座標,則着色器編譯器無法優化此代碼路徑並在着色器執行之前將紋理數據帶入。但是,是的,你是正確的,沒有9個不同的矢量,你不能在頂點着色器上實現3x3卷積。

最後你需要測量和決定。

+0

感謝您的回答,@TraxNet。我有一種預感,它不會是一個全有或全無的主張,但我還沒有發現任何能夠記錄着色器性能的方面。 – 2013-05-04 22:57:41

+0

我檢查了這個http://www.imgtec.com/powervr/insider/docs/PowerVR.Performance%20Recommendations.1.0.28.External.pdf,但沒有給我們已經知道的更多的信息。爲了使事情變得更加複雜,使用許多變化會導致性能下降,因爲它們需要進行插值和存儲。 – Trax 2013-05-04 23:27:17