来自这个reddit帖子的答案。
...驱动程序可能需要一些额外的元数据来管理给定的资源。这就是为什么我们需要调用 vkGet...MemoryRequirements() 函数并分配足够的内存。
但是,vkMapMemory根据上面的答案,映射分配的内存,其中可能包含驱动程序所需的元数据。
当我写入映射内存时,我如何知道我是否覆盖了元数据?
您应该忽略帖子的这一部分。这是无稽之谈。
事实上,实现可能需要VkBuffer和VkImage对象的元数据。但是,当您将这些对象绑定到内存时,该元数据不会存储在您提供的数据中。VkDeviceMemory它们与VkBuffer和VkImage对象相关联。它们在构造这些对象时被分配(这就是为什么创建它们需要 a VkAllocationCallbacks)并在它们被销毁时被释放。
查询缓冲区和图像的内存需求的目的不是为了与缓冲区/图像本身关联的元数据。这是为了布局目的。某些缓冲区的使用必须具有特定的对齐方式,并且大小可能需要向上舍入到该对齐方式。最佳平铺图像的布局是完全不透明的;您不能直接写入平铺图像的字节。您只能使用图像复制命令将其复制到/复制出。
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |