- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
vkMapMemory状态:
vkMapMemory does not check whether the device memory is currently in use before returning the host-accessible pointer. The application must guarantee that any previously submitted command that writes to this range has completed before the host reads from or writes to that range, and that any previously submitted command that reads from that range has completed before the host writes to that region
vkMapMemory
或者有其他方法可以做到这一点?
最佳答案
gpu 将尝试访问映射内存的唯一时间是在提交访问该内存的命令缓冲区时。该内存将一直使用,直到关联的 vkFence
已发出信号。
一个完全通用的解决方案是跟踪 gpu 的每个内存访问,并用一个开始/结束对包围每个 CPU 映射的内存访问,该对将在适当的栅栏上等待并根据需要调用刷新/无效。这是大量的状态跟踪和过多的潜在阻塞调用。
但是,对于持久网格/纹理数据,您只需将内存写入暂存缓冲区,然后复制到设备本地非主机可见缓冲区。你不应该经常需要这个,所以一个围栏来跟踪它的副本是否在飞行中就足够了。或者对于只需要在单个帧(每个对象转换)中存活的数据,您可以使用环形缓冲区。 GPU 遮挡测试或计算结果的回读,可以使用环形缓冲区。
我希望你能看到正在出现的模式。只使用几个映射的环形缓冲区,并非常注意 gpu 何时使用它们,然后你只需要为每个环形缓冲区保留一个 vkFence+offset+size 的小数组,以确保不会发生数据危险。
关于multithreading - 如何同步 `vkMapMemory` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38845473/
vkMapMemory状态: vkMapMemory does not check whether the device memory is currently in use before retur
我是一名优秀的程序员,十分优秀!