From the Vulkan doc表示“vkInvalidateMappedMemoryRanges保证设备写入pMemoryRanges所描述的内存范围(已使用VK_ACCESS_HOST_WRITE_BIT和VK_ACCESS_HOST_READ_BIT访问类型提供给主机内存域)对主机可见。”
我想知道哪个命令使用VK_ACCESS_HOST_WRITE_BIT和VK_ACCESS_HOST_READ_BIT执行内存域操作,以使对设备域的写入也可用于主机域?或者这是否意味着vkInvalidateMappedMemoryRanges将自行执行设备域到主机域的操作?我知道vkQueueSubmit将在执行vkflushmappedmemoryranges之后在内部执行主机域到设备域的操作,但是什么命令做相反的事情呢?
1条答案
按热度按时间kwvwclae1#
与Vulkan中的其他操作一样,您必须在写入和读取之间建立一个屏障,以使读取器可以使用写入操作。读取操作在主机上并不改变这一事实;它只是改变了你必须如何去创造那个障碍。
在设备写入之后,您需要使用内存屏障,以通过
VK_ACCESS_HOST_READ_BIT
提供主机可用性。这通常通过使用以VK_PIPELINE_STAGE_HOST_BIT
作为目标作用域的管道屏障来完成。然而,CPU在以某种方式与屏障同步之前不能对任何事件进行操作,因此它需要等待在屏障或围栏之后设置的事件,该事件是通过整个队列提交操作提交的,注意,事件本身不能 * self * 包含屏障;屏障必须在事件被设置之前发生。