能否用Timeline Semaphore等待完成队列传输后免额外屏障使用资源?
Vulkan同步:Timeline Semaphore等待后是否无需额外图像屏障?
我需要把数据从暂存Buffer复制到Image,再提交到传输队列完成同步传输(因架构限制不能用异步传输,要在主机端等待传输完成)。想确认用Timeline Semaphore等待指定值后,后续在图形队列使用该资源时是否不需要额外的一次性图像屏障。我的流程代码如下:
command_buffer.begin() command_buffer.copy_buffer_to_image(buffer, image); command_buffer.pipeline_barrier(image_barrier(image, transfer_queue_family, graphics_queue_family); command_buffer.end() timeline_semaphore(0); submit_info(semaphore_submit_info{timeline_semaphore, 1}, command_buffer_submit_info(command_buffer)); transfer_queue.submit(submit_info); timeline_semaphore.wait(1);
可以安全地在图形队列中使用该资源,无需再执行额外的图像屏障,原因如下:
- 你的传输命令缓冲内已经包含了跨队列族的图像屏障,该屏障会将Image的布局和访问权限同步至图形队列可合法使用的状态。
- Timeline Semaphore的
wait(1)操作确保了传输队列上的所有提交任务(包括上述屏障)已完全执行完毕,主机端等待完成时,Image的状态已满足图形队列的使用要求。 - 只要你设置的图像屏障正确指定了目标队列族(图形队列族)、目标布局以及对应的访问掩码,图形队列后续对该Image的操作就能直接合法访问,无需重复做同步屏障。
内容的提问来源于stack exchange,提问作者Krupip
相关产品推荐
相关产品推荐

