问题描述
我正在尝试更新Vulkan渲染场景中的模型(例如,使用具有不同数量节点的新网格),并希望清除缓冲区中保存的数据,就像这样(在Model类内部) ,其中device
和vertices
是成员,device
是VkDevice
,而vertices.memory
是VkDeviceMemory
):
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 (将#修改为@)