为什么开始在获取的交换链图像上绘图时不需要内存障碍?

时间:2019-07-18 02:24:47

标签: c++ vulkan

我正在学习Vulkan,在我不得不处理内存可见性之前,我在内存障碍方面的经验非常好。

我觉得每次我以前在上面写资源时,都必须使用存储屏障,反之亦然。有点像存储器上是否有一个状态,指出该状态是用于写入还是读取。我知道这样做的原因与缓存管理有关,但是从更高的角度来看,这就是我的看法。

当我看不到内存障碍时,坏事就开始了,根据我(很可能是错误的)理解,内存障碍应该是。

例如,如果我想绘制一些东西并将其显示在屏幕上,则没有内存障碍可以从用于演示(因此用于读取)的交换链图像过渡到用于绘制(因此用于绘图)的图像。用于写作)。当我完成绘图时,也没有相反顺序的障碍。

我看到将登台主机可见缓冲区复制到设备本地缓冲区时会发生相同的事情。您可以在映射的内存中写入某些内容,将其刷新,然后开始在命令缓冲区中记录副本,而不会从主机可写内存过渡到传输读内存的任何障碍。因此,我想知道我的误解或隐含的事物使一切立即可用。

1 个答案:

答案 0 :(得分:1)

演示之间没有障碍是非法的。交换链图像必须位于ul.custom-nav-Items.nav.navbar-nav>li>a { color: #fff9f9; font-size: 15px; font-weight: 700; display: inline-block; ==> padding-top: 5%; ==> padding-bottom: 5%; } 中才能显示。当您的应用确实向图像写入内容时,它必须采用不同的布局。实现此目标的唯一方法是使用类似障碍的图元。

写入映射的内存是一种罕见的例外。对映射内存的写入将自动对任何后续VK_IMAGE_LAYOUT_PRESENT_SRC_KHR可见。请参阅规范的Host Write Ordering Guarantees章。

为什么本教程没有障碍,因为它涵盖了您可能未达到的next chapter中的同步。他们通过Subpass Dependencies来做到这一点。 earlier chapter about render passes中显示了其中一部分的布局转换。