gpt4 book ai didi

vulkan - vkAcquireNextImageKHR 语义?超时是什么意思?

转载 作者:行者123 更新时间:2023-12-02 00:06:21 28 4
gpt4 key购买 nike

我对 vkAcquireNextImageKHR 的语义感到困惑。具体来说,什么情况下函数可以返回VK_TIMEOUT?即什么可以阻止它无法立即获取图像?它可能会等待什么发生?

即使演示引擎尚未完成从图像的读取,似乎也可以获取图像,并且无论如何都需要使用信号量或栅栏来同步所获取图像的使用。我错过了什么?

最佳答案

Nicol Bolas 的答案是正确的,但由于对其的响应询问了有关其在实际实现中的使用位置的详细信息,因此我将在此处添加另一个答案。

在 Android 上,vkQueuePresentKHR 将图像发送到合成器 (SurfaceFlinger),由合成器显示该图像。合成器在每次显示刷新时重新显示该图像,直到获得为该窗口显示的新图像。在获得下一个图像之前,它不知道将来是否需要再次读取缓冲区或需要读取多少次,并且无法创建在上次读取完成时发出信号的信号量。 (假设,您可以构建一个可以做到这一点的系统,但这不是 Android 用于这项工作的 Linux 内核同步机制。)因此,在您呈现图像 N+1 之前,合成器无法将图像 N 释放回您的应用程序以供其获取,因为它无法为您提供与之一起使用的信号量。

比这更复杂一点,因为即使您呈现第 N+1 帧,合成器也不知道渲染信号量发出信号需要多长时间,因此它仍然不立即知道需要多长时间将需要能够读取第 N 帧的图像。

这扩展到具有两个以上缓冲区的交换链。

我对其他系统不太熟悉,但我相信其他系统也有类似的限制,导致它们无法让您在呈现图像之前任意获取图像。构建一个允许这样做的演示引擎绝对是可能的,但 Vulkan 需要在现有系统和现有演示引擎上工作,因此必须忍受现有系统施加的限制。 Khronos 成员无法更改 Windows 合成器,而 X11、Wayland 和 Android 等其他合成器则难以/缓慢地更改,因为这样做可能会影响所有现有应用程序、框架等。

关于vulkan - vkAcquireNextImageKHR 语义?超时是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52665787/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com