如何解决我怎么知道调用vkFreeMemory是安全的?
我正在尝试更新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 举报,一经查实,本站将立刻删除。