假设我提交了两个命令缓冲区,它们修改了从相同队列生成的相同纹理:
var a: MTLCommandBuffer
var b: MTLCommandBuffer
...
a.commit()
b.commit()
然后,假设我等待第二个完成:
b.waitUntilCompleted()
b
是否有可能在a
之前完成?根据{{1}}的文档
命令缓冲区在同一命令队列中排队的所有命令缓冲区之后执行
这是否意味着commit()
将在b
完成之后完成执行,还是仅在a
开始执行之后才开始执行?
答案 0 :(得分:1)
根据commit
的文档,假设此处的缓冲区位于同一队列中:
命令缓冲区在同一命令队列中排队的所有命令缓冲区之后执行。
这是合乎逻辑的,因为一个MTLCommandQueue
一次只能执行一个缓冲区。因此b
将在a
执行之后开始执行,等待它意味着完成后两者都将完成。