gpt4 book ai didi

c++ - Vulkan 样本 : vkQueueSubmit always followed by vkWaitForFences?

转载 作者:可可西里 更新时间:2023-11-01 17:56:40 25 4
gpt4 key购买 nike

API-Samples Vulkan 自带的,似乎总是在调用 vkQueueSubmit 之后调用 vkWaitForFences,直接调用或通过 execute_queue_command_buffer(在 util_init 中.hpp)。调用 vkWaitForFences 将阻塞 CPU 执行,直到 GPU 完成前面 vkQueueSubmit 中的所有工作。这实际上不允许同时构建多个帧,这(理论上)会显着限制性能。

是否需要这些调用,如果需要,是否有另一种方法可以在构建新帧之前不要求 GPU 空闲?

最佳答案

我们在飞行中实现多帧的方法是为您拥有的每个交换链帧缓冲区设置一个栅栏。然后仍然使用 vkWaitForFences 但等待 ((n+1)%num_fences) 栅栏。

此处有示例代码https://imgtec.com/tools/powervr-early-access-program/

uint32_t current_buffer = num_swaps_ % swapchain_fences.size();
vkQueueSubmit(graphics_queue, 1, &submit_info, swapchain_fences[current_buffer]);
// Wait for a queuesubmit to finish so we can continue rendering if we are n-2 frames behind
if(num_swaps_ > swapchain_fences.size() - 1)
{
uint32_t fence_to_wait_for = (num_swaps_ + 1) % swapchain_fences.size();
vkWaitForFences(device, 1, &swapchain_fences[fence_to_wait_for], true, UINT64_MAX);
vkResetFences(device, 1, &swapchain_fences[current_buffer]);
}

关于c++ - Vulkan 样本 : vkQueueSubmit always followed by vkWaitForFences?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35563795/

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