vulkan - vulkan API 复制了什么?
问题描述
当应用程序调用 Vulkan API 命令时,在某些情况下,会传递指向应用程序拥有的内存的指针。Vulkan 是否曾经存储过传递给它的此类指针?你怎么知道的?
例如,让我们接受vkCmdWaitEvents
命令。我将一个pEvents
指向数组的指针传递给VkEvent
. 返回后,我可以立即vkCmdWaitEvents
删除该数组吗?还是我必须等到该等待已执行并且封闭的 CommandBuffer 已被销毁?即 vulkan 是否获取数组的副本,还是仅存储指向数组第一个元素的指针?你怎么知道哪个?
解决方案
它永远不会。
应用程序拥有的内存的所有权会立即被传入的任何 Vulkan 命令获取。必须在命令持续时间结束时将此类内存的所有权释放回应用程序,以便应用程序可以在获取它的所有命令返回后立即更改或释放此内存。
指针必须在多个调用中保持有效的唯一情况是当它用于pUserData
回调(如VkDebugReportCallbackCreateInfoEXT
或分配回调)时。
推荐阅读
- .net-core - WSDL 和 .NET 核心
- javascript - 数据被发送到我的数据库而没有提出请求
- android - 使用 createComposeRule 运行 Jetpack Compose UI 测试时出现“RuntimeException:无法启动活动...无法解析 Intent 的活动”
- sql-server - 使用参数定义时获取共享数据集的计数
- reactjs - Firebase查询React中的连接属性
- python - 创建字典数据图?
- html - Jekyll _post 在站点内置到 _site 时不使用 css
- mongodb - 如何在脚本中克隆 MongoDB 数据库?
- pointers - Nil 指针取消引用试图将指针复制到指针
- java - 循环遍历对象数组并访问特定的键/值字段