我尝试使用Metal编写3D引擎。我想了解编码render / compute / blit命令的顺序如何影响执行顺序?驱动程序是否遵循应用程序对其进行编码的顺序,还是尝试进行优化?
换句话说,当一个渲染过程为下一个渲染过程生成数据时,编码顺序是否足以确保渲染目标没有RAW危险?
答案 0 :(得分:1)
金属编程指南指出:
发送到单个队列的所有命令缓冲区都保证按命令缓冲区入队的顺序执行。
请注意,这并不是说在连续命令开始之前命令完成,也没有说第一个命令的写入对下一个命令是可见的。然而,根据我的经验,这是金属在实践中的表现。我的猜测是,API会保守地检测资源依赖关系,并在命令缓冲区中对命令进行隔离,以确保GPU内存在命令之间保持一致。
文档很清楚,内存只是在命令缓冲区之间的边界处是CPU-GPU连贯的,而不是在命令缓冲区内的命令之间。