iOS Metal:命令缓冲区执行顺序

时间:2019-03-07 17:49:13

标签: ios metal

假设我提交了两个命令缓冲区,它们修改了从相同队列生成的相同纹理:

var a: MTLCommandBuffer
var b: MTLCommandBuffer
...
a.commit()
b.commit()

然后,假设我等待第二个完成:

b.waitUntilCompleted()

b是否有可能在a之前完成?根据{{​​1}}的文档

  

命令缓冲区在同一命令队列中排队的所有命令缓冲区之后执行

这是否意味着commit()将在b完成之后完成执行,还是仅在a开始执行之后才开始执行?

1 个答案:

答案 0 :(得分:1)

根据commit的文档,假设此处的缓冲区位于同一队列中:

  

命令缓冲区在同一命令队列中排队的所有命令缓冲区之后执行。

这是合乎逻辑的,因为一个MTLCommandQueue一次只能执行一个缓冲区。因此b将在a执行之后开始执行,等待它意味着完成后两者都将完成。