首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确计算帧资源缓冲器偏移的索引

正确计算帧资源缓冲器偏移的索引
EN

Stack Overflow用户
提问于 2022-06-11 14:59:47
回答 1查看 33关注 0票数 1

让我们说,对于呈现设置来说,我们有一个可以双缓冲或三缓冲的呈现器,并且可以在运行时动态地更改此缓冲。因此,在任何时候,它都是2到3帧飞行(FIF)。

帧资源(如缓冲区)被复制以匹配FIF计数。缓冲区创建得足够大,足以容纳(帧数据大小* offsetted ),并相应地对这些缓冲区进行读写设置。

为了抵消缓冲区的影响,使用单调的循环指数是否足够好呢?

代码语言:javascript
复制
double buffer: 0, 1, 0, 1, 0, 1, ...
triple buffer: 0, 1, 2, 0, 1, 2, ...

然后,如果对first运行时进行了更改,我们首先在GPU上使用WaitIdle(),然后将该索引重置为0。

这是一种安全的缓冲方式吗,这样我们就不会践踏GPU?仍在使用的数据。

我特别不确定如何使用带交换链邮箱当前模式的三缓冲区设置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-11 15:49:59

我们首先在GPU上使用WaitIdle(),然后将这个索引重置为0。

想必,您是在谈论vkDeviceWaitIdle (这是一个几乎不应该使用的函数)。如果是这样的话,那么就非交换链资产而言,这是安全的.vkDeviceWaitIdle将停止CPU,直到GPU设备完成了所给出的所有工作。

交换链的规则不会因为你等待而改变。在尝试使用它之前,您仍然需要获取下一个图像,等等。

然而,在这里等待是没有意义的。如果您所做的只是将索引重置为0,这意味着您没有重新分配任何内存。所以,如果你从3个缓冲器变成2个,你仍然有三个缓冲器值的存储,而且你只使用其中的两个。

那么你等待完成了什么呢?您可以继续循环通过您的3个缓冲区的存储,即使你只有2个交换链图像。

等待的唯一要点是是否需要释放存储(如果要从2到3个缓冲区,则分配更多存储空间)。即便如此,等待的唯一理由是,如果在分配新内存之前删除现有内存是绝对必要的。

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

https://stackoverflow.com/questions/72585421

复制
相关文章

相似问题

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