2016-07-24 96 views
2

我试图写一个使用金属的3D引擎。我想了解编码render/compute/blit命令的顺序如何影响执行顺序?驱动程序是否遵循应用程序编码的顺序或尝试优化?GPU驱动程序如何在MTLCommandBuffer中命令编码命令?

换句话说,当一个渲染过程为下一个渲染过程生成数据时,编码顺序是否足以确保渲染目标上没有RAW危险?

回答

1

金属编程指南指出:

发送到单个队列中的所有命令缓冲区保证在该命令缓冲区被排队的顺序来执行。

请注意,这并不是说,命令完整的连续指令开始之前,也没有说,从第一个命令写入将是下一个命令可见。然而,根据我的经验,这是金属在实践中的表现。我的猜测是,API保守地检测资源依赖关系,并在命令缓冲区内隔离命令,以确保GPU内存在命令之间保持一致。

虽然文档很清楚,但内存仅在命令缓冲区之间的边界处与CPU-GPU一致,但不在命令缓冲区内的命令之间。

https://developer.apple.com/library/ios/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Cmd-Submiss/Cmd-Submiss.html

+0

我今天有一个后续问题这个今天 - 渲染通道编码成一个单一的命令缓冲区有关多怎么办?它们是否保证按照它们编码的相同顺序执行?这看起来像具有相关多遍操作的要求。 – m3v3rik