3 对 2 VkSwapchain 图像?

问题描述

因此,Vulkan 交换链基本上有一个用户定义的图像池,数量用户定义,它在创建时分配,池循环中的图像如下所示:

1. An unused image is acquired by the program from the swapchain
2. The image is rendered by the program
3. The image is delivered for presentation to the surface.
4. The image is returned to the pool.

鉴于此,交换链中有 3 个图像而不是 2 个图像有什么优势?

(我之所以这么问是因为我收到了一份 BestPractice 验证投诉,说我使用的是 2 而不是 3。)

对于 2 个图像,是不是这样一种情况会被呈现 (3.) 而另一个被呈现 (2.),然后他们来回交替这些角色?

3张图片,不是说三张中的一张会闲着吗?特别是如果循环被锁定在刷新率上?

我可能遗漏了一些东西。

解决方法

那么,如果正在呈现一幅图像,一幅图像已由 GPU 渲染完成,并且您有一些工作要渲染以供以后展示,会发生什么情况?好吧,如果您要渲染交换链图像,那么在图像 0 完成呈现之前,GPU 工作无法开始

因此,如果呈现帧的时间大于渲染帧的时间,双缓冲将导致 GPU 停顿。是的,如果渲染时间始终比当前时间短,则三重缓冲也会做同样的事情,但是您的帧时间正好处于当前时间的边缘,那么双缓冲更有可能浪费 GPU 时间。

当然,缺点是延迟;三重缓冲意味着您显示的图像将比双缓冲晚一帧。