微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我怎么知道调用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 举报,一经查实,本站将立刻删除。