2011-09-14 35 views
2

我對某些圖像處理工具使用GLSL,因此繪製了一個全屏四元組並在片段着色器中進行處理。我想知道我們是否可以期望碎片按照任何特定的優先順序進行處理?GLSL全屏四元組處理順序

我知道片段正在並行處理,我們不能保證任何特定片段的結束時間,那麼如何處理呢?這只是一個很大的隊列嗎?那麼這個模式會是什麼樣子呢?掃描線,塊等

這是驅動程序的依賴?正如你可以告訴我在這方面有幾個問題,而且我很難找到關於它的文檔。

回答

1

它沒有任何文檔,因爲它是任意處理的。硬件具有以完全任意的順序處理碎片的能力;您不能以任何方式,形狀或形式瞭解片段處理的順序。沒有控制來改變片段處理的順序,影響該順序,甚至根本沒有檢測到它。

那麼,直到4.2和ARB_shader_image_load_store。但即使如此,它內置了控制裝置,以儘可能地讓硬件儘可能地自由。

總之,如果你正在做的事情的處理順序很重要,你做錯了什麼。

這聽起來像你試圖做一個反饋循環,在那裏你同時讀取和寫入幀緩衝區(通過綁定紋理並將同一圖像附加到FBO渲染目標)。這是不允許的。


好的,所以這是關於性能,而不是功能。

您可以假設您通常對CPU的要求:內存訪問將被緩存。片段着色器進入的順序無關緊要;其中一個會首先觸及內存,稍後觸擊它的那個會從緩存中獲益。

記住:GPU是優化做這個東西。圖形處理器的銷售基於紋理渲染處理三角形的渲染速度。實現知道如何使用紋理,並且可以預期它將如何對其輸出的碎片進行排序並不愚蠢。

如果你要隨機訪問,那麼你必須隨機訪問;對此你沒有太多的辦法。但除此之外,這不是你應該在任何時候擔心或試圖優化的東西。讓硬件和驅動程序編寫者完成他們的工作。

+0

沒有。我在做的很好,我大多隻是好奇而已。處理順序可能很重要(我認爲)是針對輸入紋理讀取的緩存命中。特別是,當對正在處理的片段進行本地紋理讀取時,如果正在處理的其他片段在附近,我希望更好的高速緩存性能?至少在某些硬件上...... – wallacer

+0

@wallacer:看我的編輯。 –

+0

感謝Nicol。我是一名碩士生和圖形研究員,所以深入研究這種東西實際上是我的工作。我從你的答案中收集到的是,這主要是硬件/驅動程序依賴的行爲(正如我在我的問題中想的那樣)。 – wallacer