调用vkCmdPipelineBarrier时掩码全为0,Image Layout Transition是否生效?
关于Vulkan屏障布局转换与队列呈现的疑问解答
问题
根据Vulkan规范,有如下描述:
当在内存依赖中指定布局转换时,它会在内存依赖中的可用性操作之后、可见性操作之前发生
我们知道调用vkCmdPipelineBarrier(layout1, layout2, ...)时,srcAccessMask对应可用性操作,dstAccessMask对应可见性操作。若将两者都设为0(即该内存依赖中无可用性和可见性操作),此屏障调用后是否真的会发生从layout1到layout2的布局转换?
解答
根据规范,队列呈现调用会在此场景下执行可见性操作。关于vkQueuePresentKHR的规范说明提到:
在vkQueuePresentKHR执行前已完成的、对pPresentInfo的pImageIndices和pSwapchains成员引用的图像内存的所有写入,会自动对呈现引擎的读取操作可见。图像的此自动可见性操作发生在信号量信号操作之后、呈现引擎访问图像之前。
因此只需设置srcAccessMask以注册可用性操作,将dstAccessMask设为0,由呈现调用处理可见性操作即可。
内容的提问来源于stack exchange,提问作者Anning Wuwang
相关产品推荐
相关产品推荐

