【问题标题】:iOS Metal: command buffer execution orderiOS Metal:命令缓冲区执行顺序
【发布时间】:2019-07-29 16:56:22
【问题描述】:

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

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

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

b.waitUntilCompleted()

b 有可能在a 之前完成吗?根据commit() 的文档,

命令缓冲区在同一个命令队列中排在它之前的任何命令缓冲区之后执行

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

【问题讨论】:

  • 这不是您问题的真正答案,但是您有充分的理由使用两个命令缓冲区吗?你不能把所有的工作都编码到同一个命令缓冲区中吗?

标签: ios metal


【解决方案1】:

commit 的文档中,假设这里的缓冲区在同一个队列中:

命令缓冲区在同一个命令队列中排在它之前的任何命令缓冲区之后执行。

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

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多