3 对 2 VkSwapchain 图像?
3 vs 2 VkSwapchain images?
所以 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 渲染,并且您有一些工作要渲染以供稍后呈现,会发生什么情况?好吧,如果您正在渲染交换链图像,那么 GPU 工作无法开始,直到图像 0 完成呈现。
因此,如果呈现帧的时间大于渲染帧的时间,双缓冲将导致 GPU 停止。是的,如果渲染时间始终比当前时间短,三重缓冲也会做同样的事情,但是你的帧时间正好在当前时间的边缘,那么双缓冲有更大的机会浪费 GPU 时间。
当然,缺点是延迟;三重缓冲意味着您显示的图像将比双缓冲晚一帧看到。
所以 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 渲染,并且您有一些工作要渲染以供稍后呈现,会发生什么情况?好吧,如果您正在渲染交换链图像,那么 GPU 工作无法开始,直到图像 0 完成呈现。
因此,如果呈现帧的时间大于渲染帧的时间,双缓冲将导致 GPU 停止。是的,如果渲染时间始终比当前时间短,三重缓冲也会做同样的事情,但是你的帧时间正好在当前时间的边缘,那么双缓冲有更大的机会浪费 GPU 时间。
当然,缺点是延迟;三重缓冲意味着您显示的图像将比双缓冲晚一帧看到。