我有compute shader
包含算法。
shader storage buffers
进行沟通。在我尝试之前
glBufferData
+ glMapBufferRange(..., GL_MAP_READ_BIT)
但是,我只实现了 32 ms /帧,其中很多时间用于通信。
现在我试过
glBufferStorage
+ glGetBufferSubData
它仍然只能 32 ms /帧。
我做错了吗?如果我关闭通信并使用虚拟值计算,则性能会跳转到 18 ms /帧。知道如何改善时机吗?
答案 0 :(得分:0)
glMapBufferRange(...,GL_MAP_READ_BIT)和glGetBufferSubData()都隐式地执行类似于glFinish()的操作,这对性能不是很好。您可以通过持久映射SSBO并将CPU处理移动到其他线程来避免这种情况。主GL线程和CPU处理一个将与glFenceSync()/ glWaitSync()/ glClientWaitSync()同步。
查看this forum post讨论类似问题。