2016-05-13 48 views
1

我讀this document 和我有一個關於這句話的問題:OpenGL命令 - 串行或並行

雖然OpenGL的明確要求,命令才能完成, 並不意味着兩個(或更多)命令不能同時執行 。因此,來自一個 命令的着色器調用可能與來自其他 命令的着色器調用並行執行。

這是否意味着,例如,當我發出兩個連續的glDrawArrays調用時,第二個調用可能在第一個調用完成之前立即進行處理?

我的第一個想法是,OpenGL調用只映射到gpu的內部命令,並且OpenGL調用立即返回而沒有完成這些命令,從而使第二次OpenGL調用發出自己的內部命令。然後可以並行化由OpenGL調用創建的內部命令。

+2

你的問題只是重述*正是*引用的文字說的是一個問題。那麼,你只是問引用的文本是否正確? –

回答

0

現在說的是,執行命令的執行順序和任何併發性都僅限於實現的判斷,唯一的限制是最終結果必須看起來像所有命令一樣按照客戶程序調用的順序依次執行。

編輯:某些OpenGL調用導致隱式或顯式同步。例如回讀像素或等待同步事件。

+0

但有些功能(記憶障礙等)需要在某些情況下保證這一點。如果有這麼多的例外需要用戶修復,這怎麼能成爲標準的要求呢? – user5024425

+0

@ user5024425:那麼我確實提到了顯式同步。如果亂序操作讓你感到不安,那麼讓我通過告訴你把額外的燃料投入到這種火災中,那麼普通的CPU也是無序的。應用程序二進制文件中的指令通常不會按照它們出現的順序執行,而只會出現數據相關性出現在程序流同步的地方。請注意,我不是在這裏討論多線程和SMP,這是單線程無序執行。一些體系結構(Alpha)甚至不試圖隱藏這個事實。 – datenwolf

+0

@ user5024425:就「修復」而言。只要結果是正確的,沒有太多需要解決的問題。 OpenGL規範保證你,如果你使用一個FBO將一個四邊形然後一條線相互繪製成一個紋理,然後將該紋理作爲另一個繪製來使用,那麼事情似乎就是按照這個順序發生的。存在於OpenGL中的內存障礙和柵欄與它們存在於多處理器體系結構中的原因相同:要同步無法明確推斷數據依賴性的程序流。 – datenwolf