首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步SSBO读回

异步SSBO读回
EN

Stack Overflow用户
提问于 2022-06-21 04:22:26
回答 1查看 74关注 0票数 1

当我用Storage对象调用GetBufferSubData时,通常会有4ms的延迟。在这段时间里,我的应用程序可以工作吗?

代码语言:javascript
复制
// start GetBufferSubData
// do client/app/CPU work
// (wait if needed)
// read results from GetBufferSubData

或者使用某种API异步地从GPU复制缓冲区数据?

我能够使用glMapBufferRangeGL_MAP_PERSISTENT_BIT实现异步读取。但是,当在该缓冲区上运行计算着色器(多次背靠背)时,与没有持久映射相比,这会导致严重的性能下降。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-25 12:47:30

简单地用GL_MAP_PERSISTENT_BIT标记缓冲区的问题是,在该缓冲区上运行计算着色器(使用Nvidia Nsight Graphics描述)时,这会导致性能显著下降(慢8倍)。我怀疑这是因为映射,OpenGL需要将缓冲区读/写到一个不同的位置,这个位置在GPU上性能较差,但是性能更好/更容易被CPU访问。

我的解决方案是创建一个小得多的缓冲区(1000 x更小,16 is ),该缓冲区是持久映射的,CPU可以用来在需要时以小增量的方式读取/写入较大的缓冲区。这种组合速度要快得多,只需少量的API开销就可以满足我的需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72695308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档