Metal Compute - 排队一个已经排队的命令缓冲区

Metal Compute - enqueue an already enqueued command buffer

我是 Metal 的新手,我正在试验它的计算功能。 我在 macOS 上用 Swift 3 编写了以下代码:

repeat
{ 
    metalCommandBuffer.enqueue()
    metalCommandBuffer.commit()
    metalCommandBuffer.waitUntilCompleted()
    copy variable back to CPU
}
while {check the variable == 0}

我想执行一个计算内核,将变量复制回主机并检查是否满足某些条件。如果是,则继续执行内核,直到否则。

但是我收到以下错误:

error 'enqueue an already enqueued command buffer'

我试过只在循环内提​​交和 waitUntilCompleted 但后来我得到:

error 'commit an already committed command buffer'

我有一点 CUDA 知识,因此我可能有点误用 Metal。
谢谢

你不能重复使用那样的命令缓冲区。

您必须创建一个新的命令缓冲区,创建一个新的计算命令编码器,对命令进行编码,结束编码,然后在每次循环中提交命令缓冲区。