gpt4 book ai didi

vulkan - 是否可以在创建交换链后立即从交换链获取所有图像?

转载 作者:行者123 更新时间:2023-12-04 01:53:46 26 4
gpt4 key购买 nike

这个问题是另一个问题的答案的副产品:https://stackoverflow.com/a/37948367/3256878 .

创建交换链时,其图像位于 VK_IMAGE_LAYOUT_UNDEFINED 中。为了呈现它们需要在 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR 中。出于这个原因,在创建交换链之后,即在任何渲染发生之前,通过多次调用 vkAcquireNextImageKHR,应用程序可以使用所有这些似乎是合理的。

我假设由于图像在 VK_IMAGE_LAYOUT_UNDEFINED 中,它们应该可供应用程序使用,因为演示引擎无法呈现它们,因此除了简单的所有权外不应被锁定.这个假设是否正确?我在规范中没有发现任何明确允许或禁止这样做的内容。

我猜想问同样的问题的另一种方式是:如果交换链图像位于 VK_IMAGE_LAYOUT_UNDEFINED 中,它是否可以始终由应用程序获取?

最佳答案

不,它们通常不能一次全部获得。

规范引用解释为:

Let n be the total number of images in the swapchain, m be the value of VkSurfaceCapabilitiesKHR::minImageCount, and a be the number of presentable images that the application has currently acquired (i.e. images acquired with vkAcquireNextImageKHR, but not yet presented with vkQueuePresentKHR). vkAcquireNextImageKHR can always succeed if a ≤ n - m at the time vkAcquireNextImageKHR is called. vkAcquireNextImageKHR must not be called when if a > n - m; in such a case, and if timeout is UINT64_MAX, vkAcquireNextImageKHR may block indefinitely. [1.0.19 change] vkAcquireNextImageKHR should not be called if a > n - m with a timeout of UINT64_MAX; in such a case, vkAcquireNextImageKHR may block indefinitely.

所以如果我没记错的话,它们都只能在m = 1的情况下获取。

更新:经过一些曲解,引用可以这样解释,您可以尝试获取所有这些(通过提供非无限的 timeout),但不能保证成功。< br/>我会在 GitHub 上要求验证。

解决方案:我在 GitHub 上得到的初步答复是这种解释是正确的。引用中的必须可能意味着应该

问题是,您不需要为了第一次转换而获取所有图像,因为在 95% 的情况下,在出现之后(即 vkAcquire 之后)读取图像是没有意义的,所以您几乎总是提供 oldLayout==UNDEFINED(这意味着:之前的任何布局 + GPU 都可以废弃数据)。

关于vulkan - 是否可以在创建交换链后立即从交换链获取所有图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37948842/

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