2011-05-21 38 views
1

我正在使用OpenGL进行一些GPGPU处理。所以我有不同的线程给OpenGL处理​​线程提供工作。工作而不是等待glMapBuffer

在每个“工作项目”之后,我需要调用glReadPixels和glMapBuffer以便将数据从PBO传回主机。然而,这个问题是,glMapBuffer会阻塞线程,并且直到DMA传输完成时才能完成有用的工作,即使GPU处于空闲状态。解决这个问题的常用方法是创建一个具有最长DMA传输时间深度的流水线。但是,由于我正在研究低延迟系统,因此这是不理想的。

有没有一种办法,也许等待glMapBuffer一个单独的线程或可能得到一些通知,当DMA传输,以尽可能多的减少延迟尽可能完成什么?

回答

2

在glMapBuffer块中的其他线程中做一些额外的工作?您可以拥有多个OpenGL上下文,每个上下文都在其自己的线程中激活;如果他们被配置为共享对象,他们可以同时操作。

但是DMA实际上意味着GPU的工作,至少它的带宽已被完全消耗,所以最终性能可能会更差。