我怎么知道调用vkFreeMemory是安全的?

问题描述

我正在尝试更新Vulkan渲染场景中的模型(例如,使用具有不同数量节点的新网格),并希望清除缓冲区中保存的数据,就像这样(在M​​odel类内部) ,其中devicevertices是成员,deviceVkDevice,而vertices.memoryVkDeviceMemory):

            if (vertices.buffer)
            {
                vkDestroyBuffer(device,vertices.buffer,nullptr);
                vkFreeMemory(device,vertices.memory,nullptr);
                vertices.buffer = VK_NULL_HANDLE;
                vertices.memory = VK_NULL_HANDLE;
            }

但是偶尔会出现这样的错误,告诉我命令缓冲区正在使用内存:

ERROR: [1214025378][VUID-vkFreeMemory-memory-00677] : Validation Error: [ VUID-vkFreeMemory-memory-00677 ] Object 0: handle = 0x23b81794958,type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x485c8ea2 | Cannot call vkFreeMemory on VkDeviceMemory 0x7e08100000002e4f[] that is currently in use by a command buffer. The Vulkan spec states: All submitted commands that refer to memory (via images or buffers) must have completed execution (https://vulkan.lunarg.com/doc/view/1.2.154.1/windows/1.2-extensions/vkspec.html#VUID-vkFreeMemory-memory-00677)

并最终崩溃。 我的画图调用使用围墙来等待队列完成-但是在尝试vkFreeMemory之前,我显然错过了另一个同步步骤。 如何使该vkFreeMemory安全(r)?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)