Vulkan跨进程共享外部图像无需信号量即可运行的原因探究
Vulkan跨进程共享外部图像内存无同步仍正常运行的疑问
我实现了两个完全独立的Vulkan进程共享一块外部图像内存:一个进程通过RenderPass向该内存渲染图像,另一个进程将其显示在四边形上。开启所有验证层后仍能正常运行,无报错、无故障,但这完全超出我的预期。我原本认为必须使用外部信号量来同步不同进程对该图像内存的读写操作,却未使用也能正常工作。
我查阅了Vulkan规范,试图找到无需额外同步机制即可正常运行的明确依据,但规范内容仍令我困惑。
我的几个猜想:
- 图像的读写操作在跨进程场景下具备一定原子性?如此一来,两个进程高速读写也不会导致数据损坏?
- 若真如此,我认为当两个渲染循环不同步时,可能会出现图像撕裂,但实际并未观察到这种情况。那么,整个管线阶段的纹理加载操作与读取操作是否也具备原子性?
- 或者这只是当前设置下的巧合,完全是运气使然?
编辑补充:
- 外部纹理创建方式:
fbr_texture.c第143行 - 外部纹理加载方式:
fbr_texture.c第49行 - 帧缓冲创建方式:
fbr_framebuffer.c第67行
内容的提问来源于stack exchange,提问作者rygo6
相关产品推荐
相关产品推荐

