GPU 驱动程序如何在 MTLCommandBuffer 中对编码命令进行排序?
How does the GPU driver order encoded commands in MTLCommandBuffer?
我正在尝试使用 Metal 编写 3D 引擎。我想了解编码 render/compute/blit 命令的顺序如何影响执行顺序?驱动程序是否遵循应用对它们进行编码的顺序,还是尝试优化?
换句话说,当一个渲染通道为下一个渲染通道生成数据时,编码顺序是否足以确保渲染目标没有 RAW 危害?
Metal 编程指南指出:
All command buffers sent to a single queue are guaranteed to execute in the order in which the command buffers were enqueued.
请注意,这并不是说命令 在连续命令开始之前完成 ,也不是说第一个命令的写入对下一个命令可见。然而,根据我的经验,这就是金属在实践中的行为方式。我的猜测是 API 保守地检测资源依赖性,并在命令缓冲区内隔离命令,以便保证 GPU 内存在命令之间保持一致。
虽然文档很清楚,但内存 CPU-GPU 仅在命令缓冲区之间的边界处一致,但在命令缓冲区内的命令之间不一致。
我正在尝试使用 Metal 编写 3D 引擎。我想了解编码 render/compute/blit 命令的顺序如何影响执行顺序?驱动程序是否遵循应用对它们进行编码的顺序,还是尝试优化?
换句话说,当一个渲染通道为下一个渲染通道生成数据时,编码顺序是否足以确保渲染目标没有 RAW 危害?
Metal 编程指南指出:
All command buffers sent to a single queue are guaranteed to execute in the order in which the command buffers were enqueued.
请注意,这并不是说命令 在连续命令开始之前完成 ,也不是说第一个命令的写入对下一个命令可见。然而,根据我的经验,这就是金属在实践中的行为方式。我的猜测是 API 保守地检测资源依赖性,并在命令缓冲区内隔离命令,以便保证 GPU 内存在命令之间保持一致。
虽然文档很清楚,但内存 CPU-GPU 仅在命令缓冲区之间的边界处一致,但在命令缓冲区内的命令之间不一致。