相关疑难解决方法(0)

Vulkan中命令缓冲区之间的同步

有几种方法可以处理Vulkan中的同步.这就是我理解的方式:

  • Fences是GPU到CPU的同步.
  • 信号量是GPU到GPU的同步,它们用于同步队列提交(在相同或不同的队列上).
  • 事件更通用,在CPU和GPU上重置和检查.
  • 障碍用于命令缓冲区内的同步.

在我的情况下,我有两个命令缓冲区.我希望第二个命令缓冲区在第一个命令缓冲区之后执行.

submitInfo.pCommandBuffers = &firstCommandBuffer;
vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);

// wait for first command buffer to finish
submitInfo.pCommandBuffers = &secondCommandBuffer;
vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);
Run Code Online (Sandbox Code Playgroud)

什么样的同步最适合这个?如果我使用的vkQueueWaitIdle(queue)),是与使用栅栏相同的东西,或者我应该使用事件或信号量?

如果我同时向队列发送多个命令缓冲区:

std::vector<VkCommandBuffer> submitCmdBuffers = {
        firstCommandBuffer,
        secondCommandBuffer
    };
    submitInfo.commandBufferCount = submitCmdBuffers.size();
    submitInfo.pCommandBuffers = submitCmdBuffers.data();
Run Code Online (Sandbox Code Playgroud)

还有一种方法可以在第一个和第二个之间同步吗?

c++ synchronization gpu vulkan

23
推荐指数
2
解决办法
2644
查看次数

Vulkan命令执行顺序

引用Vulkan 1.0规范文档,第5章(命令缓冲区)第4段,

"除非另有说明,否则没有明确同步,通过命令缓冲区提交给队列的各种命令可以相对于彼此以任意顺序执行,和/或同时执行"

在第2.1.1章(队列操作)的第1段中,它也说明了

"...提交到单个队列的命令缓冲区按照它们提交的顺序播放,每个缓冲区内的命令按照它们记录的顺序播放"

第5章中的"任意顺序"是否意味着无序?然后,对于第2.1.1章"按照提交顺序播放"的陈述,这不是冲突吗?或者命令只是按顺序"回放"但是"执行"无序?

graphics vulkan

5
推荐指数
1
解决办法
1222
查看次数

标签 统计

vulkan ×2

c++ ×1

gpu ×1

graphics ×1

synchronization ×1