gpt4 book ai didi

c++ - "Semaphore must not be currently signaled or in a wait state"

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:28 26 4
gpt4 key购买 nike

我正在学习 Vulkan。我编写了一个简单的程序来在屏幕上渲染单个 3D 网格对象。问题是我从验证层收到成千上万的投诉(对于渲染的每一帧),说 "DS(ERROR): object: 0x1 type: 5 location: 9900 msgCode: 373295628: vkAcquireNextImageKHR: Semaphore must not be currently signaled 或者处于等待状态。”我编写代码的前提是队列提交等待的信号量在从 vkQueueSubmit 返回后未发出信号,并准备好在下一帧的 vkAcquireNextImageKHR 中使用。然而,情况似乎并非如此。虽然渲染没有问题,但我得到了我想要的图像,但我关心修复验证层报告的任何不一致。

最佳答案

I wrote my code based on the premise that the semaphore that queue submission waits upon, is unsignaled after returning from vkQueueSubmit.

不,你的假设是错误的。当发出信号的批处理工作完成并且等待此信号量的另一批工作开始时,信号量将被解除信号。但这发生在后台,发生在硬件上。从应用程序的角度来看,您不知道这种情况何时发生,除非您将您的应用程序与 GPU 同步(通过 vkDeviceWaitIdle()、vkQueueWaitIdle() 命令,或者更优选地,通过使用栅栏)。

vkQueueSubmit() 函数几乎立即返回。但是您不知道硬件何时会处理这批提交的工作。它可能会立即执行,或者可能有一些非常大的提交仍在处理中,您的新提交必须等待它完成。您只是不知道这种情况何时发生,您不能做出任何假设 - 您需要执行某种形式的同步才能确定。

更重要的是 - 它可能(并且很可能会)在大部分时间都有效。但是可能有一种硬件,您执行它的方式可能无法生成正确的结果。因此,最好修复验证层报告的问题。

查看 Vulkan Cookbook 中的两个代码示例:关于 preparing a single frame of animation 的一个关于synchronizing presentation of multiple frames .

关于c++ - "Semaphore must not be currently signaled or in a wait state",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47330915/

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