2011-05-21 85 views
1

我正在使用OpenGL進行一些GPGPU處理。所以我有不同的線程給OpenGL處理​​線程提供工作。工作而不是等待glMapBuffer

在每個「工作項目」之後,我需要調用glReadPixels和glMapBuffer以便將數據從PBO傳回主機。然而,這個問題是,glMapBuffer會阻塞線程,並且直到DMA傳輸完成時才能完成有用的工作,即使GPU處於空閒狀態。解決這個問題的常用方法是創建一個具有最長DMA傳輸時間深度的流水線。但是,由於我正在研究低延遲系統,因此這是不理想的。

有沒有一種辦法,也許等待glMapBuffer一個單獨的線程或可能得到一些通知,當DMA傳輸,以儘可能多的減少延遲儘可能完成什麼?

回答

2

在glMapBuffer塊中的其他線程中做一些額外的工作?您可以擁有多個OpenGL上下文,每個上下文都在其自己的線程中激活;如果他們被配置爲共享對象,他們可以同時操作。

但是DMA實際上意味着GPU的工作,至少它的帶寬已被完全消耗,所以最終性能可能會更差。