当我用Storage对象调用GetBufferSubData时,通常会有4ms的延迟。在这段时间里,我的应用程序可以工作吗?
// start GetBufferSubData
// do client/app/CPU work
// (wait if needed)
// read results from GetBufferSubData或者使用某种API异步地从GPU复制缓冲区数据?
我能够使用glMapBufferRange和GL_MAP_PERSISTENT_BIT实现异步读取。但是,当在该缓冲区上运行计算着色器(多次背靠背)时,与没有持久映射相比,这会导致严重的性能下降。
发布于 2022-06-25 12:47:30
简单地用GL_MAP_PERSISTENT_BIT标记缓冲区的问题是,在该缓冲区上运行计算着色器(使用Nvidia Nsight Graphics描述)时,这会导致性能显著下降(慢8倍)。我怀疑这是因为映射,OpenGL需要将缓冲区读/写到一个不同的位置,这个位置在GPU上性能较差,但是性能更好/更容易被CPU访问。
我的解决方案是创建一个小得多的缓冲区(1000 x更小,16 is ),该缓冲区是持久映射的,CPU可以用来在需要时以小增量的方式读取/写入较大的缓冲区。这种组合速度要快得多,只需少量的API开销就可以满足我的需要。
https://stackoverflow.com/questions/72695308
复制相似问题